Häufigstes Element einer Liste ausgeben

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Hallo,
folgendes Problem: ich möchte eine Liste aus vielen int-Zahlen wie folgt bearbeiten. Die Liste soll in 20er Schritten auf die häufigste Zahl untersucht werden und diese Zahl soll dann in eine neue Liste übertragen werden.
Bsp: [0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,4,5.............] => Ergebnis: [0]
[...,0,0,0,0,1,1,1,2,2,2,2,2,2,2,2,2,3,5,5............] => Ergebnis: [0,2]
usw.
Aus einer Liste mit 400 Zahlen wird also eine Liste mit 20 zahlen!
Ich benutze den folgenden Code um die häufigste Zahl zu bestimmen:

Code: Alles auswählen

z = max(set(data_events3), key=data_events3.count)
Wie kann ich jetzt immer in 20er Schritten die Ur-Liste durchgehen und die Ergebnisse in die neue Liste einfügen? Was passiert wenn die Liste z.B. 416 Elemente hat?

DANKE!
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ede1994: Schau mal in der Python-Dokumentation nach dem Tutorial. Speziell ``for``-Schleifen und ”slicing”-Syntax dürften Dich interessieren um in einer Schleife immer 20 Elemente verarbeiten.

Was bei 416 Elementen passiert, hängt davon ab was Du für Code schreibst. Je nach dem was Du willst was in dem Fall passiert, musst Du halt Code schreiben, der das tut was Du willst. :-)
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Pack deine Liste in ein Numpy-Array, bringe es in die Form die du haben willst und dann kannst du scipy.stats.mode() darauf anwenden,
liefert dir sofort alle Mode Werte und die Anzahl wie oft

Code: Alles auswählen

import numpy as np
from scipy import stats

a = np.random.rand(400) * 10
a = a.astype(int)

a = a.reshape(20, 20)
m = stats.mode(a)
print(m)  # Mode Werte und wie oft
print(m[0][0]) # nur die Mode Werte
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Danke für die Antworten!
Ich hatte zuvor folgendes probiert:

Code: Alles auswählen

data_events4 = [data_events3[i:i+20] for i in xrange(0, len(data_events3),20)]
So konnte ich meine Liste schon mal unterteilen, jedoch komme ich dann nicht weiter :D
Pack deine Liste in ein Numpy-Array, bringe es in die Form die du haben willst und dann kannst du scipy.stats.mode() darauf anwenden,
liefert dir sofort alle Mode Werte und die Anzahl wie oft
Das verstehe ich nicht wirklich :?:
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ede1994: Wieso kommst Du dann nicht weiter? Eine Teillösung um in einer Liste das häufigste Element zu suchen hast Du doch bereits in Deinem ersten Beitrag gepostet. Das musst Du doch jetzt nur noch auf jede Teilliste anwenden‽

Wobei die Teillösung nicht die effizienteste ist jedes Element einzeln zu zählen und dafür immer wieder die Liste durchzugehen. Schau Dir mal `collections.Counter` an.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

__blackjack__ hat geschrieben: Montag 26. November 2018, 16:19 Wobei die Teillösung nicht die effizienteste ist jedes Element einzeln zu zählen und dafür immer wieder die Liste durchzugehen. Schau Dir mal `collections.Counter` an.
Ich hab mir das mal angeschaut und es funktioniert auch. ABER ich möchte ja nicht nur wissen welche Zahl am häufigsten vorkommt, sondern ich will diese Zahl in eine neue Liste eintragen (wobei die Ur-Liste immer in 20er-Blöcken bearbeitet werden soll) und daran scheitere ich bis jetzt!
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du weißt, wie Du die Häufigkeit in einer Liste bestimmen kannst und Du schon gezeigt hast, wie man eine Liste in Teillisten aufteilt, was fehlt Dir dann noch, um beides zu kombinieren?
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Danke für all die Anregungen und Hilfen!
Ich konnte das Problem jetzt lösen!
Antworten