Python 2.7 - 检查单元素元组列表中的双元素元组中的第一个元素

时间:2013-01-09 14:47:07

标签: python python-2.7

我有两个元组列表。

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

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)

1 个答案:

答案 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)

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