2017-04-01 1 views
-2

Ich habe Python 3 seit etwa 1 Woche gelernt und ich kann einfach keinen Weg finden, dies zu tun, also hier ist meine Frage.So erkennen Sie doppelte Wörter in einer Liste und zählen sie auf eine bestimmte Art

Ich habe diese Liste:

['apple', 'banana', 'apple', 'tomato', 'carrot', 'apple', 'banana'] 

Jetzt möchte ich die duplizierten Worte erfassen, zählen sie, legte das Ergebnis vor dem Wort und Druck in einer einzigen Zeichenfolge wie in diesem Beispiel:

Apfel 3, Banane 2, Tomate, Karotte

Reihenfolge spielt keine Rolle.

Antwort

0
arr = ['apple', 'banana', 'apple', 'tomato', 'carrot', 'apple', 'banana'] 

', '.join(x + ' ' + str(arr.count(x)) for x in set(arr)) 

gibt diese:

'banana 2, carrot 1, apple 3, tomato 1' 

Wenn Sie 1 s ausschließen möchten:

', '.join(x + (' ' + str(arr.count(x)) if arr.count(x) > 1 else '') for x in set(arr)) 

Welche produziert:

'banana 2, carrot, apple 3, tomato' 

Eine Erklärung:

Dies ist, was Sie ein "Verständnis" nennen würden. Alles, was ich gerade mache, ist das Iterieren durch jedes unterschiedliche Element in arr (d. H. Iterieren durch den Satz einzigartiger Elemente in arr) und Zählen der Anzahl von Malen jedes Auftreten in arr unter Verwendung von arr.count(x) für jeden x in set(arr). Alles andere ist nur eine Möglichkeit, das endgültige String-Ergebnis in einer Zeile zu erhalten.

könnten Sie auch collections.Counter interessiert sein, die effektiv ein Wörterbuch des Elements zurück: count Paare und macht es einfach, in Ihrer Liste x tritt ein bestimmtes Element die Anzahl der Male schnell zu finden. :

>>> collections.Counter(arr) 
Counter({'apple': 3, 'banana': 2, 'carrot': 1, 'tomato': 1}) 
+0

Danke, genau das, was ich wollte und auch danke für die Erklärung und den Vorschlag half es al ot. – Jhonny

0

können Sie Counter von Sammlungen verwenden:

from collections import Counter 

the_list = ['apple', 'banana', 'apple', 'tomato', 'carrot', 'apple', 'banana'] 

dct = Counter(the_list) 

for i in range(len(dct.keys())): 
    print dct.keys()[i], str(dct.values()[i])+", ", 
+0

Danke, Counter und Sammlung ist etwas, was ich versuche zu verstehen. – Jhonny

+0

Ich bin froh, dass ich helfen konnte! – Ajax1234

0

Hier ist eine einfache Lösung:

list = ['apple', 'banana', 'apple', 'tomato', 'carrot', 'apple', 'banana'] 
    d = {x:list.count(x) for x in list} 
    print d 

Ausgang ist: { 'Tomate': 1, 'Karotte': 1 , 'apple': 3, 'banana': 2}

+0

Wenn Sie auch sortieren, wird der Code zu d = {x: list.count (x) für x in Liste} für den Schlüssel in sortierten (d) geändert: print "% s:% s"% (Schlüssel, d [Schlüssel]) – sainid

Verwandte Themen