Wie kann ich herausfinden welche Zahl in meiner Liste am meisten vorkommt [Python]?

4 Antworten

Nutze collections.Counter. Dann einfach schauen, welcher Schlüssel den höchsten Wert hat, fertig.

Exemplarisch:

>>> l=[1,2,5,1,5,2,9,11,23,7,1,8,2]
>>> max(collections.Counter(l).items(),key=lambda v:v[1])[0]
1

Noch als Ergänzung, Counter ist letztlich nur ein spezialisiertes Dictionary, dessen Kontruktor Dir die Arbeit der Histogrammbildung direkt abnimmt - die Nutzung ist reine Bequemlichkeit. Die Liste wird also einmal linear gescannt, danach scannt max über alle Einträge und sucht das Maximum. Warum ich diese Variante vorgeschlagen habe, 2 lineare Scans bedeutet O(n).

Die Methode count der Liste muß für einen gegebenen Wert die Liste linear abscannen, insbesondere muß sie das für jedes Element der Liste machen, das bedeutet O(n^2). Die Nutzung von Sets kann helfen, wenn ich wenig einzigartige Werte habe, andernfalls wirds damit nicht viel besser.

Ich demonstriere das mal in Zahlen, damit es eindrücklicher ist:

timeit.timeit('max(collections.Counter(l).items(),key=lambda v:v[1])[0]',setup="from __main__ import l,collections",number=1)
0.004965975880622864
 timeit.timeit('max(l,key=l.count)',setup="from __main__ import l",number=1)
17.095573596656322

Der Unterschied ist bei größeren Listen also eklatant.

python1noob 
Fragesteller
 09.11.2021, 20:13

Dankeschön!

0

Das nennt man in der Statistik den Modalwert (nicht zu verwechseln mit dem Modalwert aus der Mathematik). Gibt's im eingebauten Statistikmodul von Python.

from statistics import mode
a = [1234567, 7654321, 1234567, 7654321, 1234567]
print(mode(a))

Du musst die Werte in a natürlich als Zahlen einfügen und nicht wie in deinem Beispiel als Listen mit jeweils einer Zahl.

python1noob 
Fragesteller
 11.11.2021, 07:20

Wie kann ich ich [[1],[2],[3]] zu [1,2,3] umwandeln?

0
daCypher  11.11.2021, 09:07
@python1noob

Am besten natürlich, indem du die Liste gleich so anlegst. Ansonsten z.B. mit

b = [y for x in a for y in x]
0

Zwei Ansätze:

  • Erstelle ein Dict und iteriere über deine Liste mit einer Schleife. Wenn ein Wert nicht im Dict ist, füge ihn hinzu und setz den Wert auf 1; sonst inkrementiere Wert. Anschließend schaust du in dem Dict nach dem Maximum
  • Erstelle ein Set aus der Liste, um die einzelnen eindeutigen Werte zu bekommen. Iteriere über diese Werte und lass z.B. über list.count(value) die Anzahl der Werte bestimmen. Das Maximum dort merkst du dir und aktualisierst es, wenn nötig
python1noob 
Fragesteller
 09.11.2021, 20:12

Danke

0
a = [[1234567], [7654321], [1234567], [7654321], [1234567]]
max(a, key=a.count)
# [1234567]
KarlRanseierIII  09.11.2021, 20:24

Funktioniert zwar, ist aber recht lahm.

0