Python では、次のようなリストのリストがあります。
[[1,2,3, 'L'], ['L'], [1]]
サブリストごとに、すべての数値要素の平均を計算したいと思います。したがって、値「L」は除外する必要があります。上記の例の結果は次のようになります。
[2, [], 1]
これを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]]