4
[3, 3, 3, 4, 4, 2]

だろう:

[ (3, 3), (4, 2), (2, 1) ]

出力は、最初に最大カウントから最小カウントの順にソートする必要があります。この場合、3対2対1です。

4

5 に答える 5

13

Python 2.7以降でカウンターを使用できます(このレシピは2.5以降で機能します)。

from collections import Counter
print Counter([3, 3, 3, 4, 4, 2]).most_common()
# [(3, 3), (4, 2), (2, 1)]
于 2011-01-25T09:18:27.137 に答える
3
data = [3, 3, 3, 4, 4, 2]
result = []
for entry in set(data):
    result.append((entry, data.count(entry)))
result.sort(key = lambda x: -x[1])
print result

>>[(3, 3), (4, 2), (2, 1)]
于 2011-01-25T09:15:26.603 に答える
2

collections.Counterを使用してみてください:

from collections import Counter
data = [3,4,2,3,4,3]
Counter(data).most_common()
于 2011-01-25T09:19:19.967 に答える
2

これを行うために、なぜO(n ** 2)アルゴリズムを選択するのでしょうか。Counterの代替手段(2.7未満の場合)はそれほど難しくありません

>>> from operator import itemgetter
>>> from collections import defaultdict
>>> L=[3, 3, 3, 4, 4, 2]
>>> D=defaultdict(int)
>>> for i in L:
...     D[i]+=1
... 
>>> sorted(D.items(), key=itemgetter(1), reverse=True)
[(3, 3), (4, 2), (2, 1)]
于 2011-01-25T10:16:08.247 に答える
0
def myfun(x,y):
    return x[1]-y[1]

list1 = [3, 3, 3, 4, 4, 2]
s1 = set(list1)
newlist = []
for e in s1:
    newlist.append((e,list1.count(e)))
print sorted(newlist,cmp=myfun)

これがあなたが求めていたものだと思います。最初の答えを急いで申し訳ありません。ただしcmp、sortedの引数はpython3では使用できないことに注意してください

于 2011-01-25T09:13:29.287 に答える