2016-07-27 10 views
-1

仮定Iはlistリスト内の最大アイテムの出現号

L= [3 2 1 3 5 4 5 3 5 3] 

出力35としてのないとしてリストに最大であるべきです。出現の私が今

from collections import defaultdict 

d = defaultdict(int) 
for i in height: 
    d[i] += 1 
result = max(d.iteritems(), key=lambda x: x[1]) 
print len(result) 

まで、これを試すことができています3

である。しかし、それは唯一のリスト内の項目の最大出現を与えているとして、これは、すべてのリストのために働いていませんが、時にはそれが最大値ではありません項目。

+0

だから、あなたはこれまで何を試してみましたが、どこに問題がありますか? – Sirko

+0

maxオブジェクトを最初に見つけて、その出現数を数えるのはどうでしょうか? – Yaron

+2

リストの場合は、 'max'と' list.count'を結合するだけの簡単なものでなければなりません... – mgilson

答えて

3

使用maxlist.count

max_element= max(L) 
count= L.count(max_element) 
print(count) 
+0

これは、OPのアプローチよりも遅くなる可能性があり、OPのアプローチが失敗した理由(これはわずか*間違っていた) 。 –

+0

@MartijnPieters私は知っている、私は知っている。私は答えを投稿するつもりはありませんでしたが、誰も問題の最も明白な解決策を投稿していないので、私はいくつかの無料の担当者に悪い笑いを入れてください。しかし、公平になるために、私はOPのコードがなぜ機能しなかったのかを説明する必要はないと思います。 OP自身は_ "これはアイテムの最大出現を与えるだけなので、すべてのリストでは機能していない"と述べています。 –

+0

もちろん説明が必要です。彼らはなぜそれがうまくいかないのか理解しようとしています。 OPに魚を与えて、それをどうやって捕まえたのか、そしてなぜそれをしなかったのかを教えてください。 –

1

チェックこのコード: -

L= [3, 2, 1, 3, 5, 4, 5, 3, 5, 3] 
newDict = {} 
for i in L: 
    newDict.setdefault(i,0) 
    newDict[i]+=1 

filter(lambda x : (newDict[x] == max(newDict.values())) ,newDict)[0] 
+0

'.keys()'を呼び出す必要はありません。 'newDict'を直接反復処理します。 –

+0

そしてなぜ 'collections.defaultdict'の使用を中止しますか? OPのどこが間違っているのか説明していない。 –

+0

@MartijnPieters yestそれはありがとう –

2

あなたは最大、というよりも最大アイテムを摘みました。あなたはmax()key引数をドロップすることによって、これを解決した後、ちょうど('LL は常に 2であること、それの長さではありません!)結果を印刷することができた:

また
result = max(d.iteritems()) 
print result # prints the (maxvalue, count) pair. 

だけに印刷result[1]最大値のカウントを出力します。

は、その中で最大のキーと値のペアを見つけ、その後、あなたのアイテムをカウントするcollections.Counter() objectを使用します。

from collections import Counter 

counts = Counter(L) 
max_key, max_key_count = max(counts.iteritems()) 
print max_key_count 

KはLの長さであるあなた自身、これはO(KN)アプローチのようにしてNはユニークなアイテムの数です。これは、Lのすべてを2回ループすることを避ける点で、max_element = max(L); count = L.count(max_element)アプローチよりも若干効率的です。どれが実際に速いのかは、Nがどれくらい小さいかによって決まります。Kです。

関連する問題