我有一个列表列表,其中每个内部列表代表电子表格中的一行。使用我当前的数据结构,如何使用相同的索引对内部列表上的每个元素执行操作(这相当于在电子表格中的列中执行操作。)
这是我正在寻找的一个例子(就增加而言)
>>> lisolis = [[1,2,3], [4,5,6], [7,8,9]]
>>> sumindex = [1+4+7, 2+5+8, 3+6+9]
>>> sumindex = [12, 15, 18]
这个问题可以通过切片解决,但我无法看清楚如何干净利落地解决这个问题。是否有一个漂亮的工具/库可以为我完成这个?
答案 0 :(得分:8)
只需使用zip
:
sumindex = [sum(elts) for elts in zip(*lisolis)]
答案 1 :(得分:1)
@tzaman有一个很好的列表解决方案,但由于你还在标签中加了numpy
,如果你有一个numpy二维数组,那就有一个更简单的解决方案:
>>> inport numpy
>>> a = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> a.sum(axis=0)
array([12, 15, 18])
如果您有大型数组,这应该更快。
>>> sumindex = numpy.array(lisolis).sum(axis=0).tolist()
答案 2 :(得分:1)
>>import pandas as pd
>>df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]], columns=['A','B','C'])
>>df.sum()
A 12
B 15
C 18
答案 3 :(得分:1)
list(),map(),zip()和sum()函数简化了这个问题:
>>> list(map(sum, zip(*lisolis)))
[12, 15, 18]
答案 4 :(得分:1)
首先,我要填写我们要添加的内容的列表:
>>> lisolis = [[1,2,3], [4,5,6], [7,8,9]]
然后为我的款项创建一个空列表:
>>> sumindex = []
现在,我将在循环内开始循环。我将添加每个小列表(即“ y”循环)中相同位置的数字,并针对每个位置(即“ x”循环)进行数字化。
>>> for x in range(len(lisolis[0])):
z = 0
for y in range(len(lisolis)):
z += lisolis[y][x]
sumindex.append(z)
range(len(lisolis [0]))给我小名单的长度,所以我知道要加多少个位置,而range(len(lisolis))给我小名单的数量,所以我知道列表中任何特定位置需要加多少个数字。
“ z”是占位卡持有人。特定列表位置中的每个数字都将被添加到“ z”中,直到它们加起来为止。之后,我将“ z”的值放入sumindex的下一个插槽中。
要查看结果,然后输入:
>>>sumindex
这会给我:
[12, 15, 18]