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

时间:2012-05-24 14:30:43

标签: python list average literals mean

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

[[1,2,3, 'L'], ['L'], [1]]

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

[2, [], 1]

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

感谢。

3 个答案:

答案 0 :(得分: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))

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

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

答案 1 :(得分:5)

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

[numpy.mean([x for x in sublist if isinstance(x, numbers.Number)]) for sublist in mainlist]

答案 2 :(得分:1)

假设:

x = [[1,2,3, 'L'], ['L'], [1]]

如果你必须有一个单行:

[sum(w)/float(len(w)) if w else w for w in [[z for z in y if isinstance(z, numbers.Number)] for y in x]]