Liste Sortieren

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
deside
User
Beiträge: 9
Registriert: Freitag 5. März 2021, 16:01

Guten Abend,
ich habe eien Liste mit Objkten einer selbst erstelletn Klasse

Code: Alles auswählen

class Flight:
    def __init__(self,nr_original, nr,landing_time_expected,landing_time_expected_variance, category ):
        self.nr_original=nr_original
        self.nr=nr
        self.landing_time_expected=landing_time_expected
        self.landing_time_expected_variance=landing_time_expected_variance
        self.category=category
Ich habe meien Liste mit

Code: Alles auswählen

flights=[]
initialisiert und mit
flights.append(...)
befüllt

Nun möchte ich die Liste nach landing_time_expected_variance aufsteigend sortieren
landing_time_expected_variance ist ein Integer

Wie kann ich dies tuen, und am besten dabei eine neue Liste erzeugen mit den gleichen elementen nur halt anders sortiert.
Grüße
Deside
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Die sorted-Funktion hat ein key-Argument.
deside
User
Beiträge: 9
Registriert: Freitag 5. März 2021, 16:01

I habe
newlist = sorted(flights, key=lambda Flight: Flight.landing_time_expected_variance, reverse=True)
versucht. Es erzeugt dabei auch ne neue Liste aber die is nicht dach dem gewünschten Attribut sortiert.
Wie muss ich die Zeile abändern?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Fuer mich schon.

Code: Alles auswählen

import random


class Flight:
    def __init__(self, landing_time_expected_variance):
        self.landing_time_expected_variance=landing_time_expected_variance

    def __repr__(self):
        return f"<{self.__class__.__name__}:{self.landing_time_expected_variance}>"


def main():
    entries = [Flight(random.randint(1, 100)) for _ in range(10)]
    print(entries)
    print(sorted(entries, key=lambda Flight: Flight.landing_time_expected_variance, reverse=True))


if __name__ == '__main__':
    main()
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Es ist nur etwas unglücklich die Variable im lambda-Ausdruck `Flight` mit großem `F` zu nennen. `flight` wäre schöner.
Benutzeravatar
YAPD
User
Beiträge: 120
Registriert: Dienstag 27. Juli 2021, 23:23
Wohnort: Frankfurt am Main

__deets__ hat geschrieben: Sonntag 8. August 2021, 20:42 Fuer mich schon.

Code: Alles auswählen

import random


class Flight:
    def __init__(self, landing_time_expected_variance):
        self.landing_time_expected_variance=landing_time_expected_variance

    def __repr__(self):
        return f"<{self.__class__.__name__}:{self.landing_time_expected_variance}>"


def main():
    entries = [Flight(random.randint(1, 100)) for _ in range(10)]
    print(entries)
    print(sorted(entries, key=lambda Flight: Flight.landing_time_expected_variance, reverse=True))


if __name__ == '__main__':
    main()
Schön wäre auch, wenn die Profis hier den Code, den sie hinklatschen, auch wenigstens
ein bisschen kommentieren würde. Gerade bei Neulingen, was man ja an der Anzahl der
Posts sieht. Ich bezweifle, dass das hier selbsterklärend ist :

Code: Alles auswählen

def __repr__(self):
        return f"<{self.__class__.__name__}:{self.landing_time_expected_variance}>"
Oder dass "_" immer die letzte Variable hält. Klar kann man das auch nachschauen,
aber nett wäre es trotzdem :)

VG
YAPD
-----
Yet Another Python Developer
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@YAPD: Zeichenkettenformatierung sollte man nicht erklären müssen und was willst Du bei `_` erklärt haben oder nachsehen? Klar kann man erklären, dass das eine Konvention ist, aber es ist halt auch ein Name wie jeder andere. `i` an der Stelle müsste man doch auch nicht extra erklären? Oder `dummy`, oder… Warum also `_`?

Was Du mit „immer die letzte Variable hält“ meinst, kann ich mir zwar denken, aber das ist doch hier völlig irrelevant wofür dieser Name im interaktiven Python-Interpreter verwendet wird.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

YAPD hat geschrieben: Sonntag 8. August 2021, 23:27Schön wäre auch, wenn die Profis hier den Code, den sie hinklatschen, auch wenigstens
ein bisschen kommentieren würde. Gerade bei Neulingen, was man ja an der Anzahl der
Posts sieht.
Ich beneide dich im deine hellseherischen Fähigkeiten, genau zu wissen, welche Kenntnisse ein Poster hat. Gerade nach so wenigen Posts. In meiner diesbezüglichen Unfähigkeit muss ich leider darauf vertrauen, dass der oder diejenige mit konkreten Fragen auf mich zukommt. Denn die Zeit, jedes Mal 30 Seiten über Grundlagen der Informationsverarbeitung, Elektronik, drei Sorten Betriebssysteme, Softwaredesign und relative Mondfeuchte zu liefern, habe ich leider nicht.

Konkret hat der Poster einen Ausdruck dargestellt (übrigens einen, den 90% der hier erstpostenden nicht auf die Kette kriegen würden. Soviel zu deiner Einschätzung), vom dem er dachte, er tut nicht das richtige. Tut er aber, was ich mit einem kompakten Beispiel angelehnt an seinem Code, damit ich den Ausdruck unverändert nutzen konnte, belegt habe. Es muss also an etwas anderem liegen, wenn’s bei ihm nicht klappt. Woran? Du bist ja gut im Hellsehen, sag’s mir.
Antworten