Python 基于另一个列表筛选列表

Python 基于另一个列表筛选列表,python,list-comprehension,Python,List Comprehension,我想根据中的项目过滤数据 data = [ ['Basket', 'NBA ET', 'Kobe'], ['Basket', 'NCAA', 'Shaq'], ['Basket', 'ENG', 'Shaq'], ] drop = ['NBA', 'NCAA'] 因为我想把NBA ET中的 filtered = [d for d in data if d[1] not in drop] # assume d[1] will hold 我需要的是: # pseudo

我想根据
中的项目过滤
数据

data = [
    ['Basket', 'NBA ET', 'Kobe'],
    ['Basket', 'NCAA', 'Shaq'],
    ['Basket', 'ENG', 'Shaq'],
]
drop = ['NBA', 'NCAA']
因为我想把NBA ET中的

filtered = [d for d in data if d[1] not in drop]   # assume d[1] will hold
我需要的是:

# pseudocode
filtered = [d for d in data if _ not in d[1] for _ in drop]
但我永远记不起语法

对于记录,
过滤后的
应产生
[['Basket',ENG',Shaq']]

您可以使用空格分割字符串:

filtered = [d for d in data if not any(dropped in d[1].split() for dropped in drop)]
如果将
drop
设置为一组,只需测试交叉点:

drop = set(drop)

filtered = [d for d in data if not drop.intersection(d[1].split())]
下降量越大
时,后者的性能越高

演示:

您可以使用并拆分空白字符串:

filtered = [d for d in data if not any(dropped in d[1].split() for dropped in drop)]
如果将
drop
设置为一组,只需测试交叉点:

drop = set(drop)

filtered = [d for d in data if not drop.intersection(d[1].split())]
下降量越大
时,后者的性能越高

演示:

您可以使用并拆分空白字符串:

filtered = [d for d in data if not any(dropped in d[1].split() for dropped in drop)]
如果将
drop
设置为一组,只需测试交叉点:

drop = set(drop)

filtered = [d for d in data if not drop.intersection(d[1].split())]
下降量越大
时,后者的性能越高

演示:

您可以使用并拆分空白字符串:

filtered = [d for d in data if not any(dropped in d[1].split() for dropped in drop)]
如果将
drop
设置为一组,只需测试交叉点:

drop = set(drop)

filtered = [d for d in data if not drop.intersection(d[1].split())]
下降量越大
时,后者的性能越高

演示:



@尼克,是的,你想删除而不是包含。更正。@nutship:我没有被否决;有人删除了他们的投票。@nutship:ick,是的,你想删除“不包括”。更正。@nutship:我没有被否决;有人删除了他们的投票。@nutship:ick,是的,你想删除“不包括”。更正。@nutship:我没有被否决;有人删除了他们的投票。@nutship:ick,是的,你想删除“不包括”。更正。@nutship:我没有被否决;有人删除了他们的upvote。无需为
any()
创建列表。事实上,这首先违背了使用
any()
的目的。这里不要使用列表理解,而是使用生成器表达式(从
any()
调用中删除
[…]
括号)。奇怪的是,当我删除列表理解时,结果是空的。这是什么原因?不,你的代码对我有用。您的代码与我的代码相同,没有
[…]
(除了使用的名称)。我使用的是python 2.7,这可能是原因吗?不,我也使用python 2.7。不需要为
any()
创建列表。事实上,这首先违背了使用
any()
的目的。这里不要使用列表理解,而是使用生成器表达式(从
any()
调用中删除
[…]
括号)。奇怪的是,当我删除列表理解时,结果是空的。这是什么原因?不,你的代码对我有用。您的代码与我的代码相同,没有
[…]
(除了使用的名称)。我使用的是python 2.7,这可能是原因吗?不,我也使用python 2.7。不需要为
any()
创建列表。事实上,这首先违背了使用
any()
的目的。这里不要使用列表理解,而是使用生成器表达式(从
any()
调用中删除
[…]
括号)。奇怪的是,当我删除列表理解时,结果是空的。这是什么原因?不,你的代码对我有用。您的代码与我的代码相同,没有
[…]
(除了使用的名称)。我使用的是python 2.7,这可能是原因吗?不,我也使用python 2.7。不需要为
any()
创建列表。事实上,这首先违背了使用
any()
的目的。这里不要使用列表理解,而是使用生成器表达式(从
any()
调用中删除
[…]
括号)。奇怪的是,当我删除列表理解时,结果是空的。这是什么原因?不,你的代码对我有用。您的代码与我的代码相同,没有
[…]
(除了使用的名称)。我使用的是python 2.7,这可能是原因吗?不,我也使用python 2.7。