我有两个列表:
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”方式是什么?
答案 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]