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。