我有两个列表,并且我想删除列表l1上具有l2中没有提到的任何不同子字符串的元素。我的列表如下:
l1 = ['PC||macOS||Xbox One||PlayStation 4||Nintendo Switch',
'macOS||PC||Xbox One',
'iOS',
'PC||PlayStation 4',
'PC',
'Web',
'PC||macOS',
'PC||macOS||Linux',
'PC||Linux',
'PC||Web',
'PC||Xbox One||PlayStation 4||Nintendo Switch',
'PC||macOS||Linux||Web',
'macOS||PC||Linux||PlayStation 4||Xbox One',
'PC||Android',
'PC||macOS||Linux||Android',
'macOS||iOS||Linux||PC||PlayStation 4',
'Linux',
'PC||macOS||Web',
nan,
'Xbox One||PC||Nintendo Switch||PlayStation 4',
'iOS||PC||macOS||Linux',
'PC||macOS||Android||Web',
'iOS||Linux||PC||macOS',
'Android',
'macOS||PC||Linux',
'Linux||PC'
]
l2 = ['PC', 'macOS', 'Linux', 'mac', 'Web']我想要获得的是在l1中的所有组合,它们只有在l2中声明的子字符串。因此,在新的列表中,我不会有任何像“PlayStation4”、"iOS“或"Xbox One”这样的元素。类似于:
l3 = [
'PC',
'Web',
'PC||macOS',
'PC||macOS||Linux',
'PC||Linux',
'PC||Web',
'PC||macOS||Linux||Web',
'PC||macOS||Linux||Android',
'Linux',
'PC||macOS||Web',
'macOS||PC||Linux',
'Linux||PC'
]发布于 2020-12-16 23:36:04
让l2成为一个用于快速查找的集合,然后使用带有生成器理解的all:
l2_set = set(l2)
l3 = [x for x in l1 if all(chunk in l2_set for chunk in x.split("||"))]发布于 2020-12-16 23:36:55
使用集合非常简单。
l3 = [v for v in l1 if set(v.split('||')) <= set(l2)]不过我还是得把那个不靠谱的南过滤掉。
https://stackoverflow.com/questions/65326372
复制相似问题