python - 按元素对列表组合求和
问题描述
我有一个嵌套列表,它可以具有不同的长度(每个子列表将始终包含与其他子列表相同数量的元素):
list1=[[4.1,2.9,1.2,4.5,7.9,1.2],[0.7,1.1,2.0,0.4,1.8,2.2],[5.1,4.1,6.5,7.1,2.3,3.6]]
我可以使用 itertools 找到长度为 n 的子列表的所有可能组合:
n=2
itertools.combinations(list1,n)
[([4.1, 2.9, 1.2, 4.5, 7.9, 1.2], [0.7, 1.1, 2.0, 0.4, 1.8, 2.2]),
([4.1, 2.9, 1.2, 4.5, 7.9, 1.2], [5.1, 4.1, 6.5, 7.1, 2.3, 3.6]),
([0.7, 1.1, 2.0, 0.4, 1.8, 2.2], [5.1, 4.1, 6.5, 7.1, 2.3, 3.6])]
我想按索引对每个元组中的所有列表求和。在这个例子中,我最终会得到:
[([4.8, 4.0, 3.2, 4.9, 9.7, 3.4],
[9.2, 7.0, 7.7, 6.8, 10.2, 4.8],
[5.8, 5.2, 8.5, 7.5, 4.1, 5.8])]
我努力了:
[sum(x) for x in itertools.combinations(list1,n)]
[sum(x) for x in zip(*itertools.combinations(list1,n))]
每次都遇到错误。
解决方案
您可以zip
为此使用:
>>> [tuple(map(sum, zip(*x))) for x in itertools.combinations(list1, n)]
[(4.8, 4.0, 3.2, 4.9, 9.700000000000001, 3.4000000000000004),
(9.2, 7.0, 7.7, 11.6, 10.2, 4.8),
(5.8, 5.199999999999999, 8.5, 7.5, 4.1, 5.800000000000001)]
推荐阅读
- c - C中的意外表达
- ruby-on-rails - 如何使用 +1 区号正则表达式捕获美国电话号码
- android - 为什么不推荐使用 androidx.security.crypto.MasterKeys?
- selenium - Selenium 4,Ubuntu 上的 Microsoft Edge(铬)
- node.js - DocuSign REST API - 暂停工作流 + webhooks (node.js)
- cmake - 如何通过 CMakeLists.txt 构建名称具有特殊字符的 cpp 文件
- html - 如何将图像和文本与 display:inline-block 垂直对齐?
- mysql - MySQL 查询未执行
- flutter - 为什么我不能在 Dart 类中做最终的 Widget[] 孩子
- reactjs - 如果不返回承诺,我如何等待状态设置?