1

Python では、次のようなリストのリストがあります。

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

サブリストごとに、すべての数値要素の平均を計算したいと思います。したがって、値「L」は除外する必要があります。上記の例の結果は次のようになります。

[2, [], 1]

これを1行で行う簡単な方法はありますか?

ありがとう。

4

3 に答える 3

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より適しているようです。

于 2012-05-24T14:34:23.700 に答える
5

numpyこれは非常に読みにくいワンライナーですnumbers。数値要素のないリストnanは、結果リストのように表示されます。

[numpy.mean([x for x in sublist if isinstance(x, numbers.Number)]) for sublist in mainlist]
于 2012-05-24T14:44:22.170 に答える
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]]
于 2012-05-24T14:53:37.647 に答える