这是我尝试过的
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])
我非常感谢您提供答案。
答案 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)
惯用法来转置配对列表。