首页 > 解决方案 > 添加不同长度循环的列表

问题描述

我有两个清单:

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”方式是什么?

标签: pythonlist

解决方案


您可以使用列表推导将两个列表中的元素压缩在一起,并使用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循环中的元素直到另一个迭代器耗尽,这使得对交错的元素执行一些操作变得非常容易。


推荐阅读