添加最小长度上不同长度的列表

时间:2019-02-11 12:08:48

标签: python list

我有两个列表:

a = [50, 17, 54, 26]
b = [19,  7,  8, 18, 36, 8, 18, 36, 18, 14]

我想将b的相应元素添加到a的元素中。当a的元素用完时,我想循环浏览a以提供这些元素。结果应该是:

c = [69, 24, 62, 44, 86, 25, 72, 62, 68, 31]

实现此目标的“ Pythonic”方式是什么?

2 个答案:

答案 0 :(得分:10)

您可以使用列表推导将两个列表中的元素添加在一起,然后使用itertools.cycle,以便迭代器a重复自身多次,直到耗尽b为止。 :

from itertools import cycle
a = [50, 17, 54, 26]
b = [19,  7,  8, 18, 36, 8, 18, 36, 18, 14]

[i+j for i,j in zip(cycle(a), b)]

输出

[69, 24, 62, 44, 86, 25, 72, 62, 68, 31]

详细信息

如果您查看从压缩表达式生成的元组的迭代器:

list(zip(cycle(a),b))

[(50, 19),
 (17, 7),
 (54, 8),
 (26, 18),
 (50, 36),
 (17, 8),
 (54, 18),
 (26, 36),
 (50, 18),
 (17, 14)]

您可以看到a中的元素不断循环直到另一个迭代器用尽,这使得对交错元素执行某些操作非常容易。

答案 1 :(得分:1)

如果您不希望导入任何内容,则可以使用modulo operator (%)

a = [50, 17, 54, 26]
b = [19, 7, 8, 18, 36, 8, 18, 36, 18, 14]
[a[i%len(a)]+b[i] for i in range(len(b))]

输出

[69, 24, 62, 44, 86, 25, 72, 62, 68, 31]