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

问题描述

我有 2 个清单。清单 1(比如 X)是 =

[ 0 , 0 , 0 , 0 ]

列表 2 是列表的列表(例如 Y),其行大小始终为 4 的倍数,但行大小可能不同。

例如 -

[[1,2,3,4,5,6,7,8] , [1,2,3,4]]

我想在 4 组中找到元素的按列总和

所以对于这个例子,总和将是 [2,4,6,8] [5,6,7,8]

目前,我正在使用 X = [sum(e) for e in zip(X , Y[j][count:count+4])]

对于一次完整的列遍历,计数是固定的。所以说Y中的列数是200。所以对于4个数字组的每次遍历,计数将保持不变(它用于对矩阵进行切片)

但是,一旦最后 4 个元素的行长度发生变化,X 就会变为空。一旦 Y 逐列完全遍历,count 就会增加。

请询问任何进一步的细节。如果需要,我还可以以包含矩阵和我当前使用的代码的文本文件的形式提供一个最小的可重现示例。

标签: pythonpython-3.xlist

解决方案


不完全确定所有内容如何在您的问题中组合在一起,但对于“不同长度的压缩列表”问题,您可以itertools.zip_longest使用fillvalue=0. 然后,您可以在第二步中将结果列表细分为块。

>>> lsts = [[1,2,3,4,5,6,7,8] , [1,2,3,4]]                                 
>>> from itertools import zip_longest                                      
>>> sums = [sum(x) for x in zip_longest(*lsts, fillvalue=0)]               
>>> [sums[i:i+4] for i in range(0, len(sums), 4)]                          
[[2, 4, 6, 8], [5, 6, 7, 8]]

推荐阅读