计算python中列表的平均值,不包括文字

Ric*_*son 1 python average list literals mean

在Python中,我有一个列表,如下所示:

[[1,2,3, 'L'], ['L'], [1]]
Run Code Online (Sandbox Code Playgroud)

我想为每个子列表计算所有数字元素的平均值.因此应排除值"L".以上示例的结果应该是:

[2, [], 1]
Run Code Online (Sandbox Code Playgroud)

有没有快速的方法在一行中这样做?

谢谢.

Sve*_*ach 11

为了得到你要求的确切结果,我会这样做:

from __future__ import division
import numbers
def average_over_numeric_values(a):
    filtered = [x for x in a if isinstance(x, numbers.Number)]
    if filtered:
        return sum(filtered) / len(filtered)
    return []
print(map(average_over_numeric_values, list_of_lists))
Run Code Online (Sandbox Code Playgroud)

这不是一个单行,而是一种非常易读的方式.

就个人而言,[]如果列表中没有空值,我就不会使用- None似乎更合适.

  • 是不是`如果len(过滤)``的内容与`if filtered`相同,这更简洁? (2认同)
  • `return np.mean(filtered)如果过滤了else []` (2认同)
  • @JFSebastian:平均值是`sum([])/ len([])`,它是未定义的,不是零. (2认同)

Bre*_*ood 5

这是一个非常难以理解的单行,假设你已经导入numpynumbers.没有数字元素的列表显示nan在结果列表中.

[numpy.mean([x for x in sublist if isinstance(x, numbers.Number)]) for sublist in mainlist]
Run Code Online (Sandbox Code Playgroud)