在 Python 中,我有一个列表列表,如下所示:
[[1,2,3, 'L'], ['L'], [1]]
我想为每个子列表计算所有数字元素的平均值。因此应排除值“L”。上述示例的结果应该是:
[2, [], 1]
有什么快速的方法可以在一行中做到这一点吗?
谢谢。
为了得到你要求的确切结果,我会这样做:
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
似乎更合适。
假设您已经导入了numpy
和numbers
. 没有数字元素的列表显示为nan
结果列表。
[numpy.mean([x for x in sublist if isinstance(x, numbers.Number)]) for sublist in mainlist]
鉴于:
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]]