Seite 1 von 1
Gibt es eine Python Funktion für das meist vorkommende Element in einem Iterabe)
Verfasst: Sonntag 21. Mai 2017, 11:04
von Alfons Mittelmeyer
Ich habe das geschrieben:
Code: Alles auswählen
def most_in(sequence):
most_occured = None
counts = {}
count = 0
for item in sequence:
counts[item] = 0
for item in sequence:
counts[item] += 1
for item in sequence:
if counts[item] > count:
count = counts[item]
most_occured = item
return most_occured
def main():
my_list = [
(15,0,0),
(75,0,1),
(75,0,1),
(25,0,1),
(75,0,1),
(15,0,0)]
most_occurred = most_in(my_list)
print(most_occurred)
if __name__ == '__main__':
main()
Kann man das auch einfacher machen?
Re: Gibt es eine Python Funktion für das meist vorkommende Element in einem Iterabe)
Verfasst: Sonntag 21. Mai 2017, 11:15
von Sirius3
Code: Alles auswählen
from collections import Counter
counts = Counter(my_list)
print(counts.most_common(1)[0])
oder, falls Du Dir das wirklich selbst programmieren willst:
Code: Alles auswählen
def most_in(sequence):
counts = {}
for item in sequence:
counts[item] = counts.get(item, 0) + 1
return max(counts.items(), key=lambda m: m[1])[0]
Re: Gibt es eine Python Funktion für das meist vorkommende Element in einem Iterabe)
Verfasst: Sonntag 21. Mai 2017, 11:45
von Alfons Mittelmeyer
@Sirius3: Danke, dann ist die richtige Lösung also:
Code: Alles auswählen
from collections import Counter
def most_in(sequence):
most_common = None
if sequence:
most_common = Counter(sequence).most_common(1)[0][0]
return most_common
def main():
my_list = [
(15,0,0),
(75,0,1),
(75,0,1),
(25,0,1),
(75,0,1),
(15,0,0)]
most_common = most_in(my_list)
print(most_common)
if __name__ == '__main__':
main()
Re: Gibt es eine Python Funktion für das meist vorkommende Element in einem Iterabe)
Verfasst: Sonntag 21. Mai 2017, 12:02
von Sirius3
@Alfons Mittelmeyer: meist will man eine Exception, wenn man kein Element ermitteln kann, weil die Liste leer ist, also hier
Code: Alles auswählen
def most_in(sequence):
return Counter(sequence).most_common(1)[0][0]
einen IndexError, oder hier:
Code: Alles auswählen
def most_in(sequence):
return max(Counter(sequence).most_common(1))[0]
einen ValueError.
Re: Gibt es eine Python Funktion für das meist vorkommende Element in einem Iterabe)
Verfasst: Sonntag 21. Mai 2017, 12:32
von Alfons Mittelmeyer
@Sirius: meinst Du dann besser so:
most_common = None if not my_list else most_in(my_list)
statt
most_common =most_in(my_list)
Mich stören aber solche Codezeilen, besonders, wenn sie öfter vorkommen.
Re: Gibt es eine Python Funktion für das meist vorkommende Element in einem Iterabe)
Verfasst: Sonntag 21. Mai 2017, 12:43
von Sirius3
@Alfons Mittelmeyer: die Frage ist, wie Du den Sonderfall Leere Liste im weiteren Verlauf behandeln willst, und da sind im Allgemeinen Exceptions besser; None könnte ja durchaus auch ein valider Eintrag in der Liste sein.
Re: Gibt es eine Python Funktion für das meist vorkommende Element in einem Iterabe)
Verfasst: Sonntag 21. Mai 2017, 12:56
von Alfons Mittelmeyer
Sirius3 hat geschrieben:@Alfons Mittelmeyer: die Frage ist, wie Du den Sonderfall Leere Liste im weiteren Verlauf behandeln willst, und da sind im Allgemeinen Exceptions besser; None könnte ja durchaus auch ein valider Eintrag in der Liste sein.
Die leere Liste ist kein Sonderfall, sondern der Normalfall
Eine gefüllte Liste entsteht nur wenn jemand
self.columnconfigure oder
self.rowconfigure benutzt.
Und der Sonderfall ist, wenn jemand im GuiDesigner die Spalten oder Zeilen wieder verringert. Dann wird bei Verwendung von
self.columnconfigure oder
self.rowconfigure der Rest mit (0,0,0) aufgefüllt.