python - 添加不同长度循环的列表
问题描述
我有两个清单:
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”方式是什么?
解决方案
您可以使用列表推导将两个列表中的元素压缩在一起,并使用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
循环中的元素直到另一个迭代器耗尽,这使得对交错的元素执行一些操作变得非常容易。
推荐阅读
- azure - 如何使用 terraform 在 azure api 管理中启用所有 API 级别的应用程序洞察力?
- c - 如何将 tast_struct current 更改为 x86 中的特定 task_struct?
- spss - 在 SPSS 中系统地重命名变量(没有 Python)
- ios - 将“String”类型的值转换为预期的参数类型“Int”
- javascript - Javascript 横幅.innerHTML += ""不工作
- java - 从内部函数获取变量
- machine-learning - SageMaker 在部署时无法为容器提取模型数据存档 tar.gz
- javascript - Javascript:停止直到按下 RETURN 键
- android - 无法在 Facebook 中分享照片
- javascript - 从数组Javascript中删除多个对象