2

我有两个元组列表。

第一个列表有包含两个元素的元组:

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)
4

1 回答 1

9

您不能从正在循环的列表中删除元素。改用列表推导:

list_a = [la for la in list_a if la[:1] not in list_b]

请注意,我们la[:1]使用(单个元素)元组进行测试;la[0]只是单个字符串。

如果您必须经常这样做,请考虑使用 set forlist_b代替:

set_b = set(list_b)

集合中的查找需要恒定的时间,而列表成员资格测试的线性时间。

于 2013-01-09T14:48:38.577 回答