我有两个元组列表。
第一个列表有两个元素的元组:
list_a = [('a','apple'), ('b','banana'), ('c','cherry')]
第二个列表包含只有一个元素的元组:
list_b = [('d',), ('e',), ('a',)]
我需要删除 list_a 中的元组,其中元组的第一个元素包含在 list_b 中。所以目标是呈现 list_a:
list_a = [('b','banana'), ('c','cherry')]
我试过:
for la in list_a:
if la[0] in list_b:
list_a.remove(la)
最佳答案
您不能从正在循环的列表中删除元素。改用列表理解:
list_a = [la for la in list_a if la[:1] not in list_b]
请注意,我们测试 la[:1]
是为了测试一个(单个元素)元组; la[0]
就是单个字符串。
如果您必须经常这样做,请考虑为 list_b
使用一个集合:
set_b = set(list_b)
与列表成员测试的线性时间相比,集合中的查找需要常数时间。
关于Python 2.7 - 检查单元素元组列表中的双元素元组中的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14237789/