列表列表的总和;返回总和列表

2025-03-11 08:52:00
admin
原创
36
摘要:问题描述:让data = [[3,7,2],[1,4,5],[9,8,7]]假设我想对列表中每个列表的索引元素求和,例如将矩阵列中的数字相加以获得单个列表。我假设数据中的所有列表长度相等。 print foo(data) [[3,7,2], [1,4,5], [9,8,7]] ...

问题描述:

data = [[3,7,2],[1,4,5],[9,8,7]]

假设我想对列表中每个列表的索引元素求和,例如将矩阵列中的数字相加以获得单个列表。我假设数据中的所有列表长度相等。

    print foo(data)

   [[3,7,2],
    [1,4,5],
    [9,8,7]]
    _______
 >>>[13,19,14]

如何迭代列表列表而不出现索引超出范围错误?也许使用 lambda?谢谢!


解决方案 1:

你可以尝试这个:

In [9]: l = [[3,7,2],[1,4,5],[9,8,7]]

In [10]: [sum(i) for i in zip(*l)]
Out[10]: [13, 19, 14]

zip它使用和的组合*来解压列表,然后根据索引压缩项目。然后使用列表推导来迭代相似索引的组,对它们求和并返回它们的“原始”位置。

为了使其更加清晰,以下是迭代时发生的情况zip(*l)

In [13]: for i in zip(*l):
   ....:     print i
   ....:     
   ....:     
(3, 1, 9)
(7, 4, 8)
(2, 5, 7)

对于长度不一致的列表,您可以使用itertools.izip_longest-fillvalue0基本上用填充缺失的索引0,从而允许您对所有“列”求和:

In [1]: import itertools

In [2]: l = [[3,7,2],[1,4],[9,8,7,10]]

In [3]: [sum(i) for i in itertools.izip_longest(*l, fillvalue=0)]
Out[3]: [13, 19, 9, 10]

在这种情况下,迭代看起来是这样izip_longest的:

In [4]: for i in itertools.izip_longest(*l, fillvalue=0):
   ...:     print i
   ...:     
(3, 1, 9)
(7, 4, 8)
(2, 0, 7)
(0, 0, 10)

解决方案 2:

对于任何矩阵(或其他雄心勃勃的数字)运算,我建议研究 NumPy。

解决问题中沿轴显示的数组总和的示例是:

>>> from numpy import array
>>> data = array([[3,7,2],
...     [1,4,5],
...     [9,8,7]])
>>> from numpy import sum
>>> sum(data, 0)
array([13, 19, 14])

这是 numpy 的 sum 函数的文档:http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html#numpy.sum

特别是第二个参数很有趣,因为它可以轻松指定应该总结的内容:所有元素或仅潜在的 n 维数组的特定轴(如)。

解决方案 3:

这将给出每个子列表的总和

data = [[3,7,2],[1,4],[9,8,7,10]]
list(map(sum, data))
[12, 5, 34]

如果你想对所有元素求和并只得到一个总和,那么请使用这个

data = [[3,7,2],[1,4],[9,8,7,10]]
sum(sum(data, []))
51

解决方案 4:

>>> data = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> for column in enumerate(data[0]):
...     count = sum([x[column[0]] for x in data])
...     print 'Column %s: %d' % (column[0], count)
... 
Column 0: 3
Column 1: 6
Column 2: 9

解决方案 5:

import numpy as np
l = [[3,7,2],[1,4,5],[9,8,7]]
print(sum(np.array(l)[:,:]))
print(sum(np.array(l)[:,0:2]))

#answer:
#[13 19 14]
#[13 19]
# use np like row column

解决方案 6:

这确实取决于您对所有内部列表(或行)长度相同的假设,但它应该按照您想要的方式进行:

sum_list = []

ncols = len(data[0])

for col in range(ncols):
    sum_list.append(sum(row[col] for row in data))


sum_list
Out[9]: [13, 19, 14]

解决方案 7:

def sum(L):
res = list()
for j in range(0,len(L[0])):
    tmp = 0
    for i in range(0,len(L)):
        tmp = tmp + L[i][j]
    res.append(tmp)
return res

解决方案 8:

此解决方案假设一个方阵,并使用两个 for 循环遍历列和行,在此过程中逐列添加。结果以列表形式返回。

def foo(data):
    # initialise length of data(n) and sum_of_col variable 
    n = len(data)
    sum_of_col = []

    # iterate over column
    for col_i in range(n):
        # column sum
        col_count = 0;

        #iterate over row
        for row_i in range(n):
            col_count += data[row_i][col_i]

        # append sum of column to list    
        sum_of_col.append(col_count)

    return sum_of_col

解决方案 9:

对长度不同或相同的列表求和的最简单的解决方案是:

total = 0
for d in data:
    total += sum(d)

一旦你理解了列表理解,你可以缩短它:

sum([sum(d) for d in data])

解决方案 10:

对于数据是字符串列表的列表的情况。按元素对字符串列表的列表求和或连接。

>>> a = [list('abc'),list('def'),list('tyu')]
>>> a
[['a', 'b', 'c'], ['d', 'e', 'f'], ['t', 'y', 'u']]
>>> [''.join(thing) for thing in zip(*a)]
['adt', 'bey', 'cfu']
>>> 

解决方案 11:

numArr = [[12, 4], [1], [2, 3]]

sumArr = 0

sumArr = sum(sum(row) for row in numArr)

print(sumArr) 

the answere: 22

我所做的:当你像这样执行“for”时例如:[row.append(1) for row in numArr] 列表将更改为:[[12, 4, 1], [1, 1], [2, 3, 1]] 我使用了 python 中的函数 sum(),该函数获取列表并对其进行迭代,然后得出列表中所有数字的总和。当我执行 sum(sum()) 时,我得到了大列表中所有列表的总和。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1887  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1425  
  在制造业数字化转型的进程中,PLM(产品生命周期管理)系统、ERP(企业资源计划)系统、MES(制造执行系统)以及 CAD(计算机辅助设计)软件都扮演着至关重要的角色。然而,这些系统和软件各自独立运行时,往往难以发挥出最大的协同效应。实现 PLM 系统与 ERP、MES、CAD 的有效集成,成为提升企业整体竞争力、优化...
plm系统的主要功能模块   3  
  产品生命周期管理(PLM)作为一种先进的管理理念和技术,在电子与半导体行业正发挥着日益重要的作用。随着电子与半导体行业的快速发展,产品更新换代速度加快,市场竞争愈发激烈,企业面临着诸多挑战,如缩短产品上市时间、提高产品质量、降低成本等。而PLM的应用为企业应对这些挑战提供了有效的解决方案,展现出巨大的应用价值。提升产品...
plm项目   4  
  PLM(产品生命周期管理)项目管理软件在现代企业的产品研发、生产与运营中扮演着至关重要的角色。它整合了从产品概念设计到退役的全流程数据与流程,助力企业提升效率、降低成本并增强创新能力。随着科技的飞速发展以及企业需求的不断演变,未来十年 PLM 项目管理软件的发展充满了无限可能,值得深入探讨与预测。智能化与自动化趋势智能...
plm产品全生命周期管理   6  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用