Das am häufigsten vorkommende Element in einer Liste ermitteln in Python?

... komplette Frage anzeigen

4 Antworten

Mir fallen spontan 2 Möglichkeiten ein:

a)

  • Iteriere über die Liste
  • Pro Durchlauf prüfst du, wie oft das aktuelle Element in der Liste vorkommt
  • Das Resultat speicherst du in einer globalen Variable, sofern ihr bisheriger Wert überschritten wurde (in dem Fall solltest du dir außerdem den aktuellen Index merken)

b)

  • Iteriere über die Liste
  • Lege dir dabei ein assoziatives Feld (Map) an, in dem du die Häufigkeit pro Element speicherst
  • Iteriere danach noch einmal über die Map, um das Element mit dem größten Wert zu bekommen
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Lolligerhans
12.08.2017, 18:02

Geht so etwas? Ähnlich wie dein (b) aber ohne zusätzliches (großes) Objekt:

  1. Sorieren
  2. Liste ein mal durchlaufen und in einer Variablen die Häufigkeiten zählen.

Dein (a) versteh ich nicht ganz aber sieht für allg. input nach n² worst case aus (?).

0

Dafür gibt es die Counter-Klasse aus dem collections-Package:

from collections import Counter as c
l = ['A', 'B', 'C', 'A']
x = c(l).most_common()[0][0]

Danach enthält die Variable x den Buchstaben 'A'. :)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von ralphdieter
13.08.2017, 14:48

Dafür gibt es...

In Python gibt's für alles ein Package! Probier mal:

> python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import antigravity
>>>
1
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
12.08.2017, 19:23

Unter dem Link findet sich auch eine ähnliche Lösung wie die aus meiner Antwort. :)

Mich überrascht allerdings, dass so viele offensichtlich suboptimale Lösungen oben schwimmen. Und das bei SO!

Kürzer und eleganter als mit collections.Counter wird man es kaum hinbekommen. :)

1

Mein Vorschlag: arbeite mit Sets:

def find_common(myList):
return max(set(myList), key=myList.count)



Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?