0

私は可変数のリストを持っており、すべてのリストからこれらの各数の最大値を見つけたいと思いました。

map関数を使用してすべてのリストの最大値をマップしようとしていますが、ジェネレーター式を使用してmap関数のパラメーターを渡す必要があります。

私はこのようなものを使用していますが、機能しません:

map(max,x[c] for c in x.keys())

例として、私のリストは辞書にあります:

{1: [0, 1, 0, 0, 3, 0],
 2: [1, 0, 0, 0, 0, 4, 5],
 3: [0, 5, 6, 0, 1, 1]}

リストがすべて同じサイズではないことに気付いたかもしれませんが、解析する必要のあるデータの取得方法のために、リストを同じサイズにしたいのです。

この結果は次のようになります。[1, 5, 6, 0, 3, 4, 5]

これを行う他の方法があるかどうか提案してください。

上記はリストの例です。実際の辞書の設定方法が原因で、x.values()を使用してリストを取得できません。リストは階層の最下部に埋め込まれているため、比較するリストを取得するには、階層の最上位を反復処理する必要があります。すべてのリストを取得するにはジェネレータ式を使用する必要があるため、x.values()を使用せずにソリューションを提供してください

4

1 に答える 1

4

最短値の終わりを過ぎて sを取得するにはmax、次のものが必要ですizip_longest

from itertools import izip_longest

d={1: [0, 1, 0, 0, 3, 0],
 2: [1, 0, 0, 0, 0, 4, 5],
 3: [0, 5, 6, 0, 1, 1]}

# there are other variations like
# [max(column) for column in izip_longest(*d.itervalues())]
print map(max, izip_longest(*d.values()))
# [1, 5, 6, 0, 3, 4, 5]

zip_longestPython 3 ではとして知られています。


すべてのリストにアクセスするための簡単な方法がない場合でも、これは依然としてそれを行う方法です。必要に応じてリストを取得できます。

d = {1: {'a': [0, 1, 0, 0, 3, 0]},
     2: {'a': [1, 0, 0, 0, 0, 4, 5]},
     3: {'a': [0, 5, 6, 0, 1, 1]}}

def value_gen(obj):
    for key in obj:
        yield obj[key]['a']

次に使用します。

map(max, izip_longest(*value_gen(d)))
于 2012-04-16T20:18:23.420 に答える