【发布时间】:2016-12-23 09:22:25
【问题描述】:
我有一个这样的元组列表:
a = [('1', '2', '5', '5', 'w', 'w', 'w', 'w'),
('1', '3', '5', '5', 'w', 'w', 'w', 'w'),
('1', '3', '4', '5', 'w', 'w', 'w', 'w'),
('1', '4', '4', '4', 'w', 'w', 'w', 'w'),
('1', '5', '5', '5', 'w', 'w', 'w', 'w')]
我希望能够过滤掉包含某些项目的元组。例如,我想找到所有包含'5', '5', 'w', 'w', 'w', 'w' 的元组,并将它们放在一个列表中。
filter_for = ['5', '5', 'w', 'w', 'w', 'w']
预期结果是:
result = [('1', '2', '5', '5', 'w', 'w', 'w', 'w'),
('1', '3', '5', '5', 'w', 'w', 'w', 'w')]
filter_for 的长度会在 1 到 7 之间变化,所以我使用 and 并不理想。
我试过了
[i for i in a if all(j in filtered_for for j in a)]
但这不起作用。
编辑:如果('1', '5', '5', '5', 'w', 'w', 'w', 'w') 也在列表中,我不希望找到该元组。我想我没有指定这一点,因为下面的所有工作解决方案也会返回这个元组。
【问题讨论】:
-
1. “似乎不起作用” 究竟是什么意思? 2.如果你想匹配那些元素的正确位置,为什么不
zip呢? -
a的所有元素和filter_for的所有元素是否总是1个字符的字符串? -
您的编辑使这个问题过于主观。你是说如果序列的头部或尾部有
array[head - 1] == array[head]或array[tail] == array[tail + 1]过滤器应该失败? -
@Robᵩ 是的,a 的所有元素和 filter_for 的所有元素始终是 1 个字符串
-
嗯,很快就会更新我的答案。