【问题标题】:Apply operation element wise to all lists in nested list [duplicate]将操作元素明智地应用于嵌套列表中的所有列表[重复]
【发布时间】:2018-11-15 16:57:44
【问题描述】:

我有嵌套,例如列表:

[[1.0, 2.0, 3.0],  
 [3.0, 3.0, 3.0]]

我需要什么:

[2.0, 2.5, 3.0]  

因此结果列表的每个元素都是逐列嵌套列表的平均值。

在 Python 2.7 中最有效的方法是什么。我猜该解决方案会使用地图,但我看不到将其应用于此任务的正确方法。

【问题讨论】:

  • 考虑numpy
  • @wim 为这样一个微不足道的任务而矫枉过正
  • @MarcoBonelli:one 琐碎的任务有点过头了,但如果程序涉及更多的数值工作,NumPy 将是一个好主意。 (另外,提问者的previous question 是一个 NumPy 问题。)
  • @user2357112 这是什么意思,哈哈。按应有的方式分别对待每个问题。 Numpy 在这个问题的范围内根本没有任何作用,它只会因为需要一个巨大的库而使工作变得更重。
  • @MarcoBonelli,所以答案可以并且应该处理边缘情况(例如大数据与小数据)。这就是为什么一个问题允许有多个答案,以及为什么当一个解决方案被接受时问题不会“关闭”。除此之外,这是一个 dup,dup 有 Python 和 NumPy 的答案。

标签: python python-2.7 list nested-lists


【解决方案1】:

您可以使用库“numpy”进行非常高效的计算。

import numpy as np

a = np.array([[1,2,3], [3,3,3]])
np.mean(a, axis=0)

【讨论】:

  • 感谢您展示了如何使用 numpy 实际解决问题,而不仅仅是说“使用 numpy”!
【解决方案2】:

使用zip 和列表理解:

lists = [[1.0, 2.0, 3.0], [3.0, 3.0, 3.0]]
averages = [sum(l)/len(l) for l in zip(*lists)]

【讨论】:

  • 注意他们说想要一些值作为整数(不是浮点数),虽然我怀疑他们真的想要这个......
  • 我怀疑他们是否意识到差异。
  • 无论哪种方式,绝对值得指出,尤其是对于其他读者
  • @takeshi6 那为什么你想要的结果显示整数答案?
  • @Barmar 已修复。我是 python 新手,我想知道在这个问题中结果是 float 还是 int 是否有很大的不同?
【解决方案3】:

你可以zip列表列表和map它到statistics.mean

from statistics import mean
list(map(mean, zip(*lst)))

这会返回:

[2, 2.5, 3]

【讨论】:

  • 吹毛求疵,它实际上返回[2.0, 2.5, 3.0](所以,都是浮点数)
  • 我真的不这么认为。 OP 使用的是 python 2.7,在 3.4 中添加了统计信息。
  • @RobBricheno 不,mean 在均值确实是整数时返回整数。
  • 人们,请不要仅仅因为 OP 使用的是过时的 Python 版本而对正确的答案投反对票。这样的答案可能仍然有助于其他使用该语言当前版本的读者。
  • @wim 2.7 并没有过时。而且这个答案实际上是错误的,因为问题的范围不涉及python 3。
【解决方案4】:

您可以使用zipmap。使用zip 对矩阵进行转置,然后在sum 的帮助下将每列的每列都用map 对列中的所有值求和。

values = [[1, 2, 3], [3, 3, 3]]
averages = map(lambda x: sum(x)/float(len(x)), zip(*values))

print averages

输出:

[2.0, 2.5, 3.0]

【讨论】:

    【解决方案5】:
    list(map(lambda x,y: (x+y)/2.0, [1, 2, 3], [3, 3, 3]))
    

    输出:

    [2.0, 2.5, 3.0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      相关资源
      最近更新 更多