我有两个元组列表。
第一个列表包含两个元素的元组:
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)
答案 0 :(得分:8)
您无法从正在循环的列表中删除元素。改为使用列表理解:
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)
集合中的查找需要恒定时间,而不是列表成员资格测试的线性时间。