Python中if-else条件后的两个列表的加法和减法

时间:2018-08-06 07:43:26

标签: python-2.7 if-statement

这是我尝试过的

c = ['8781' ,'2740', '1413', '3060', '5074']
d = ['8853' ,'2812', '1355', '2986', '5107']

start = map(int, c)
end = map(int, d)

for n,m in zip(start,end):
    if n < m:
        preS = map(lambda x:x-21, start)
        preE = map(lambda x:x+20, end)
        print (preS, preE)
    else:
        preS = map(lambda x:x-20, end)
        preE = map(lambda x:x+20, start)
        print (preS, preE)

在这里,我的循环的其他部分没有执行,并且我得到了多行相同的输出。怎么了 我期望以下列方式: preS preE 8760 8873 2719 2832 1433 1335 3080 2966 5053 5127

我得到以下输出:

  ([8760, 2719, 1392, 3039, 5053], [8873, 2832, 1375, 3006, 5127])
  ([8739, 2698, 1371, 3018, 5032], [8893, 2852, 1395, 3026, 5147])
  ([8719, 2678, 1351, 2998, 5012], [8913, 2872, 1415, 3046, 5167])
  ([8719, 2678, 1351, 2998, 5012], [8913, 2872, 1415, 3046, 5167])
  ([8718, 2677, 1350, 2997, 5011], [8913, 2872, 1415, 3046, 5167]) 

我非常感谢您提供答案。

1 个答案:

答案 0 :(得分:2)

您将在每次迭代中更新和打印整个结果列表。最后一次迭代的结果“获胜”,而早期迭代的结果中的所有元素都将被覆盖。

相反,您需要单独处理元素,并且最后只打印一次结果:

preS = []
preE = []
for n, m in zip(start, end):
    if n < m:
        preS.append(n - 21)
        preE.append(m + 20)
    else:
        preS.append(n - 20)
        preE.append(m + 20)
print preS, preE

通过列表理解可以更简洁地表达整个事情:

preS, preE = zip(*[(n - 21, m + 20) if n < m else (n - 20, m + 20)
                   for n, m in zip(start, end)])

它使用zip(*list)惯用法来转置配对列表。