Hey ich habe n bisschen versucht, List comprehension zu verstehen und bin auf etwas gestoßen, das ich nicht verstehe.
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = int(input("Please enter a number: "))
print([a for i in a if i < b])
Das Programm gibt bei mir diese Liste aus [1, 1, 2, 3, 8, 34]. Ich verstehe nicht, warum die 34 bei meiner Eingabe von 9 darin ist und zum Beispiel die 13 und die 21 nicht. Kann mir das bitte jemand erklären?
List comprehension
Der Code ist so doch falsch. Du iterierst ueber die Liste a, und weist deren Elemente dem Namen i zu. Dann pruefst du eine Bedingung mit i und b, aber wenn das wahr ist packst du DIE GANZE LISTE a als Ergebnis in deine List-Comprehension. Das sieht dann komplett anders aus als von dir beschrieben. Insofern passt das vorne und hinten nicht zusammen, und ich denke mal daher kommt auch irgendein anderes beobachtetes Fehlverhalten.
So sieht die Ausgabe aus von deinem Programm oben:
So wenn man es wie eigentlich gedacht korrigiert:
Also auch nicht mit 34 oder so drin.
So sieht die Ausgabe aus von deinem Programm oben:
Code: Alles auswählen
[[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89], [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89], [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89], [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89], [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89], [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]]
Code: Alles auswählen
Please enter a number: 9
[1, 1, 2, 3, 5, 8]
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Es wird nicht die ganze Liste genommen sondern das i-te Element. [ i ] verschwindet halt weil das der BBCode für kursiv ist. Mit Code-Tags wäre das nicht passiert:
Dann stimmt auch das beschriebene Verhalten:
Code: Alles auswählen
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = int(input("Please enter a number: "))
print([a[i] for i in a if i < b])
Code: Alles auswählen
In [9]: a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
...: b = int(input("Please enter a number: "))
...: print([a[i] for i in a if i < b])
Please enter a number: 9
[1, 1, 2, 3, 8, 34]
“Vir, intelligence has nothing to do with politics!” — Londo Mollari