1

リスト内の最も一般的な要素を返そうとしています(統計モード)。all残念ながら、iterableでの使用方法がわかりません。all()を使用しない場合は次のようになります。

def large(a):
for i in set(a):
    for j in set(a):
        if a.count(i)<a.count(j):
            break
return i

しかし、これはもっと雄弁に書くことができることを私は知っています。誰かがもっと雄弁なバージョンも書いてくれませんか?私はそれが次のようなものだと信じています:

[i for i,j in set(a) if all(a.count(i)>a.count(j)]

このコードには2つの問題があります。1set(a)つ目は、解凍するために2つ目の値が必要であり、2つ目はallここでは機能しないことです。

助けてください。ありがとう!

例:あなたは' 'が最大の要素である{'a','a','b','b','b','c'}と期待するでしょうb

4

2 に答える 2

2

OK-今あなたの質問を理解してください。以下のコードは、この問題を一般的に解決する方法ではありません。しかし、all()がどのように機能するかを学ぶのは問題ありません。Counterよりもはるかに効率が悪いことに注意してください。興味深いことに、最も頻繁に使用されるすべての要素が返されるため、マルチモーダルデータの正確な処理が必要な場合に役立つ可能性があります。

>>> q = list("aaabbbbcc")
>>> q
['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c']
>>> r = set(q)
>>> r
set(['a', 'c', 'b'])
>>> [x for x in r if all([q.count(x) >= q.count(y) for y in r])]
['b']
于 2012-06-24T20:10:39.447 に答える
1
from collections import Counter

def most_common(a):
    return Counter(a).most_common(1)[0][0]

あなたが絶対にこれをしなければならないallなら-私はそれが最善のアプローチではないと思います-試してみてください

def most_common(a):
    a_count = [(i, a.count(i)) for i in set(a)]
    for i,c in a_count:
        if all(c >= cc for ii,cc in a_count):
           return i
于 2012-06-24T20:11:24.357 に答える