Python 如何从迭代中免除列表项?
我有两个长度相等的整数列表。我想使用以下行将第一个列表的每个元素添加到第二个列表的相应元素中:Python 如何从迭代中免除列表项?,python,list,python-2.7,iteration,Python,List,Python 2.7,Iteration,我有两个长度相等的整数列表。我想使用以下行将第一个列表的每个元素添加到第二个列表的相应元素中: complete_list = [first_list[i] + second_list[i] for i in range(len(first_list))] 然而,第一个_列表中的某些元素是特殊的数字,我希望在添加其他元素以形成完整的_列表的同时,将它们从上述操作中豁免。谢谢 您可以在列表末尾粘贴if: >>> first_list = [1,2,3,10] >>&
complete_list = [first_list[i] + second_list[i] for i in range(len(first_list))]
然而,第一个_列表中的某些元素是特殊的数字,我希望在添加其他元素以形成完整的_列表的同时,将它们从上述操作中豁免。谢谢 您可以在列表末尾粘贴
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]
我倾向于将您最初的示例写成:
a = [1, 2, 3]
b = [4, 5, 6]
from operator import add
c = map(add, a, b)
# [5, 7, 9]
然后,如果您只希望根据a
上的条件“不添加”元素,则在b
上构建一个生成器,引用a
上的相应元素,并将其设置为0
,以表示无操作
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]
如何将完整_列表中特殊列表中的元素保留在其原始位置?因此,对于那些需要“a”而不是“a+b”的元素,我想免除某些字符的添加操作。那么让我们说。。。first_-list=[1,2,3,4,5]second_-list=[6,7,8,9,10]我想将这两个列表相加,但第一个_-list中的3不必执行此操作。所以我的最终答案是。。。complete_list=[7,9,3,13,15]当我按照您的第一个指令操作时,它完全跳过了3,输出列表只包含4个元素(假设我使用了这个假设场景)。当然,第二个案例可以处理这个问题。@user123288很有趣,DSM和我是如何得出相同的结果的,但有两种不同的方式:)