如何从迭代中免除列表项?

时间:2013-01-30 16:27:24

标签: python list python-2.7 iteration

我有两个长度相等的整数列表。我想使用以下行将第一个列表的每个元素添加到第二个列表的相应元素中:

complete_list = [first_list[i] + second_list[i] for i in range(len(first_list))]

然而,first_list的一些元素是特殊数字,我希望将它们从上述操作中豁免,同时添加其他元素以生成complete_list。谢谢!

2 个答案:

答案 0 :(得分:0)

你可以在listcomp的末尾加上if

>>> first_list = [1,2,3,10]
>>> second_list = [10,20,30,50]
>>> special = {2, 3}
>>> [first_list[i]+second_list[i] for i in range(len(first_list)) if first_list[i] not in special]
[11, 60]

虽然我可能在这里使用zip

>>> [a+b for a,b in zip(first_list, second_list) if a not in special]
[11, 60]

如果您希望a通过未经调整,您可以移动if并使用X if Y else Z三元语法:

>>> [a+b if a not in special else a for a,b in zip(first_list, second_list)]
[11, 2, 3, 60]

答案 1 :(得分:0)

我倾向于将您的原始示例写为:

a = [1, 2, 3]
b = [4, 5, 6]

from operator import add
c = map(add, a, b)
# [5, 7, 9]

然后,如果您只想根据a上的条件“不添加”元素,那么在b上构建一个生成器,引用a上的相应元素并使其成为0 1}}对于无操作。

special = {2}
b2 = (j if a[i] not in special else 0 for i, j in enumerate(b))
map(add, a, b2)
# [5, 2, 9]