Maximum in einer Liste finden und ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

Hallo,

Ich habe eine Liste mit Dax-Kursen:
liste = [['DAX (EDE)', '20.12.2018', 10611.1], ['DAX (EDE)', '21.12.2018', 10633.82],
['DAX (EDE)', '27.12.2018', 10381.51], ['DAX (EDE)', '28.12.2018', 10558.96],
['DAX (EDE)', '02.01.2019', 10580.19], ['DAX (EDE)', '03.01.2019', 10416.66],
['DAX (EDE)', '04.01.2019', 10767.69], ['DAX (EDE)', '07.01.2019', 10747.81],
['DAX (EDE)', '08.01.2019', 10803.98], ['DAX (EDE)', '09.01.2019', 10893.32],
['DAX (EDE)', '10.01.2019', 10921.59], ['DAX (EDE)', '11.01.2019', 10887.46],
['DAX (EDE)', '14.01.2019', 10855.91], ['DAX (EDE)', '15.01.2019', 10891.79],
['DAX (EDE)', '16.01.2019', 10931.24], ['DAX (EDE)', '17.01.2019', 10918.62]]

In dieser Liste soll das Maximum gefunden werden und in dieser Form ausgegeben werden: ['DAX (EDE)', '16.01.2019', 10931.24].
Wer kann helfen?
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Was hast Du schon versucht?
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

liste = [['DAX (EDE)', '20.12.2018', 10611.1], ['DAX (EDE)', '21.12.2018', 10633.82],
['DAX (EDE)', '27.12.2018', 10381.51], ['DAX (EDE)', '28.12.2018', 10558.96],
['DAX (EDE)', '02.01.2019', 10580.19], ['DAX (EDE)', '03.01.2019', 10416.66],
['DAX (EDE)', '04.01.2019', 10767.69], ['DAX (EDE)', '07.01.2019', 10747.81],
['DAX (EDE)', '08.01.2019', 10803.98], ['DAX (EDE)', '09.01.2019', 10893.32],
['DAX (EDE)', '10.01.2019', 10921.59], ['DAX (EDE)', '11.01.2019', 10887.46],
['DAX (EDE)', '14.01.2019', 10855.91], ['DAX (EDE)', '15.01.2019', 10891.79],
['DAX (EDE)', '16.01.2019', 10931.24], ['DAX (EDE)', '17.01.2019', 10918.62]]

liste_nur_kurs = [kurs for name, datum, kurs in liste]
Maximum = max(liste_nur_kurs)
print(liste_nur_kurs)
print("Maxumum = ", Maximum)
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

Und:

import numpy as np

liste = [['DAX (EDE)', '20.12.2018', 10611.1], ['DAX (EDE)', '21.12.2018', 10633.82],
['DAX (EDE)', '27.12.2018', 10381.51], ['DAX (EDE)', '28.12.2018', 10558.96],
['DAX (EDE)', '02.01.2019', 10580.19], ['DAX (EDE)', '03.01.2019', 10416.66],
['DAX (EDE)', '04.01.2019', 10767.69], ['DAX (EDE)', '07.01.2019', 10747.81],
['DAX (EDE)', '08.01.2019', 10803.98], ['DAX (EDE)', '09.01.2019', 10893.32],
['DAX (EDE)', '10.01.2019', 10921.59], ['DAX (EDE)', '11.01.2019', 10887.46],
['DAX (EDE)', '14.01.2019', 10855.91], ['DAX (EDE)', '15.01.2019', 10891.79],
['DAX (EDE)', '16.01.2019', 10931.24], ['DAX (EDE)', '17.01.2019', 10918.62]]

np_liste = np.array(liste)

print(np_liste)

Aber das Programm macht aus float wieder string...
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@reddy: Und was gefällt Dir nun am Ergebnis der ersten Variante nicht?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

Ich brauche als Antwort: ['DAX (EDE)', '16.01.2019', 10931.24].
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

Das Datum ist wichtig, weil ich den Dax seit 1980 in 17-Handelstagen auswerte.
Das Ergebnis möchte ich dann in einer anderen Liste speichern und dann die Werte mit dem gleichen Datum zählen.
So ergeben sich lokale Hochs beim Dax (vermute ich).
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@reddy: Dann erstelle keine zusätzliche Liste sondern wende `max()` auf die Originale Liste mit einer passenden Funktion als Argument für `key` an. Entweder ein ``lambda``-Ausdruck, oder Du erstellst die mit `operator.itemgetter()`.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

Daran habe ich gar nicht gedacht! :-)
Wenn man die Liste mit itemgetter sortiert, ist der erste Element gleichzeitig der mit dem Maximumwert.

import numpy as np
from operator import itemgetter
liste = [['DAX (EDE)', '20.12.2018', 10611.1], ['DAX (EDE)', '21.12.2018', 10633.82],
['DAX (EDE)', '27.12.2018', 10381.51], ['DAX (EDE)', '28.12.2018', 10558.96],
['DAX (EDE)', '02.01.2019', 10580.19], ['DAX (EDE)', '03.01.2019', 10416.66],
['DAX (EDE)', '04.01.2019', 10767.69], ['DAX (EDE)', '07.01.2019', 10747.81],
['DAX (EDE)', '08.01.2019', 10803.98], ['DAX (EDE)', '09.01.2019', 10893.32],
['DAX (EDE)', '10.01.2019', 10921.59], ['DAX (EDE)', '11.01.2019', 10887.46],
['DAX (EDE)', '14.01.2019', 10855.91], ['DAX (EDE)', '15.01.2019', 10891.79],
['DAX (EDE)', '16.01.2019', 10931.24], ['DAX (EDE)', '17.01.2019', 10918.62]]


liste.sort(key=itemgetter(2), reverse=True)

print(liste[0])


VIELEN DANK!
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du nur das Maximum willst, ist sortieren etwas zu viel. `max` kennt auch ein key-Argument.
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

liste = [['DAX (EDE)', '20.12.2018', 10611.1], ['DAX (EDE)', '21.12.2018', 10633.82],
['DAX (EDE)', '27.12.2018', 10381.51], ['DAX (EDE)', '28.12.2018', 10558.96],
['DAX (EDE)', '02.01.2019', 10580.19], ['DAX (EDE)', '03.01.2019', 10416.66],
['DAX (EDE)', '04.01.2019', 10767.69], ['DAX (EDE)', '07.01.2019', 10747.81],
['DAX (EDE)', '08.01.2019', 10803.98], ['DAX (EDE)', '09.01.2019', 10893.32],
['DAX (EDE)', '10.01.2019', 10921.59], ['DAX (EDE)', '11.01.2019', 10887.46],
['DAX (EDE)', '14.01.2019', 10855.91], ['DAX (EDE)', '15.01.2019', 10891.79],
['DAX (EDE)', '16.01.2019', 10931.24], ['DAX (EDE)', '17.01.2019', 10918.62]]

x = max(liste, key=lambda x:x[2])
print(x)

Das habe ich gesucht! Danke schön für die Ideen!
Antworten