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})
Danke, genau das, was ich wollte und auch danke für die Erklärung und den Vorschlag half es al ot. – Jhonny