2012-04-16 11 views
0

私はさまざまな数のリストを持っています。これらのリストの中から最大数を探したいと思っていました。最大可変数のリストへのマッピング

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

私はこのようなものを使用していますが、それは動作しません

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()を使ってリストを取得することはできません。リストは階層の最下部に埋め込まれており、比較するリストを取得するために階層の最上部を反復処理する必要があります。私は最短値の終わりを越えmax秒を取得するにはx.values()の使用

+0

私はあなたがすでにあなたのために働いていた答えを得た知っているあなたは、あなたが欲しいしかし、リストを取得することができます。ちょうどFYI 'map(max.keys()内のcのためのx [c]')は動作しません。なぜならあなたのジェネレータ式はカッコ内に置かなければならないからです。私が 'map(max、(x in c in x))'を実行すると、それは動作します。 –

答えて

4

なしそうなソリューションを提供してくださいすべてのリストを取得するために、ジェネレータ式を使用する必要があり、あなたは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] 

は、まだあなたがリストのすべてにアクセスするための簡単な方法を持っていない場合でも、それを行うための方法であるPythonの3


zip_longestとして知られています。

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))) 
+0

+1、あなたは正しいです。 –

+0

混乱して申し訳ありません。私はリストを設定している方法リストは階層の最下部に埋め込まれているので、x.values()を使ってすべてのリストを取得することはできません。階層の上を反復する必要があります。リストを取得する方法... x.values()は私のために動作しません – emad

+0

これは私のために働く:map(max、izip_longest(x.keys()内のcのためのx [c]))) – emad

関連する問題