3

リストを考えると

List2 = ['Apple', 'Apple', 'Apple', 'Black', 'Black', 'Black', 'Green', 'Green', 'Red', 'Yellow']

リスト内の各要素が何回出現するかを数える方法を見つけようとしています。これは信じられないほど単純でなければなりませんが、私には理解できません。count 関数についての本を読んで、それを実装しようと決めました。だろうと思った..

for item in List2:
    newlist=[List2.count()] 

私はこれが私が望むものに私を導くだろうと思った:

newlist=[3,3,2,1,1]

しかし、count には引数が必要であるという TypeError を受け取りました。私はPythonに非常に慣れていないので、できればできるだけすべてを馬鹿にしてください。

4

3 に答える 3

10

collections.Counterを使用すると、アイテムとしてキーを持ち、発生回数として値を持つようなオブジェクト (同様の目的で役立ついくつかの追加機能も備えているという点で) を得るdictことができます。

from collections import Counter


>>> li = ['Apple', 'Apple', 'Apple', 'Black','Black','Black','Green','Green','Red','Yellow']    
>>> Counter(li)
Counter({'Black': 3, 'Apple': 3, 'Green': 2, 'Yellow': 1, 'Red': 1})

次に、それをどのように提示したいかを並べ替えるのはあなた次第です...

順序を維持する (非効率的な) 方法の 1 つは、カウントしてから、元のリストにインデックスを付けることです。

>>> counts = Counter(li)
>>> [counts[key] for key in sorted(counts, key=li.index)]
[3, 3, 2, 1, 1]

別の方法として、以下を使用することもできますgroupby(ただし、これは項目が連続している必要があります)。

>>> from itertools import groupby
>>> [len(list(g)) for k, g in groupby(li)]
[3, 3, 2, 1, 1]
于 2013-03-16T03:10:18.010 に答える
1

Pythonを初めて使用する場合は、何かをインポートするだけでなく、ソリューションをコーディングする方がよいと思います。これを行うためのシンプルで理解しやすい方法は次のとおりです。

counter = {}
for elem in List2:
    counter[elem] = counter.get(elem, 0) + 1
于 2013-03-16T04:37:39.380 に答える
-1

これを試すことができます:

new_list = [List2.count(x) for x in set(List2)]

これは次と同等です。

new_list = []
for x in set(List2):
    new_list.append(List2.count(x))

または辞書の場合:

new_dict = {x:List2.count(x) for x in set(List2)}
于 2013-03-16T03:33:21.467 に答える