Python: Elemente einer Liste in Int umwandeln?

2 Antworten

my_list = list[range(11)]

Du würdest hiermit auf das Element range(11) in der Liste list zugreifen - wobei list eben die Klasse für Listen ist.

my_list = list(range(11))

Erstelle eine Instanz der Klasse list unter Verwendung der Elemente, die de Generator erzeugt.

Noch als Randnotiz:

range() kann steppen, also Sprünge machen, mit filter() kannst du ein iterable mti eienr Filterfunktion filtern, in einerm Generatorausdruck oder einer Comprehension kannst Du auch direkt filtern durch Nebenbedingung.

Es gäbe also mehrere Varianten ein Set mit geraden Zahlen zu erzeugen.


RMDav 
Beitragsersteller
 08.02.2025, 12:46

Die Erklärungen verstehe ich nicht. Kannst du das einfach und verständlich wiederholen? Aber ich sehe, dass ich die Klammern verwechselt habe. Mit runden Klammern funktioniert es.

KarlRanseierIII  08.02.2025, 17:25
@RMDav

Also, Python kennt Listen, diese werden von der Klasse list implementiert. Soweit so einfach.

Für den Zugriff auf Elemente in entsprechendne Datenstrukturen wird [] genutzt, schauen wir uns das mal an:

>>> l=[0,1,2,3,4,5,6,7,8,9]
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> type(l)
<class 'list'>
>>> l[3]
3
>>> l[1:-1]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> l[1:-1:2]
[1, 3, 5, 7]

Die Nutzung von ; innerhalb der [] nennt man slicing, eckige Klammern hinter einem Namne) greifen auf Teile (hier der Liste) des Datentyps zu.

Ferner nutzt Python eckige Klammern für die Definition einer Liste, die rechte Seite der ersten Zeile definiert eine Liste.

Wenn ich ein Objekt der Klasse list instanziieren will, dann schreibe ich dafür list(), wobei ich so eine leere liste erzeuge, während ich aber auch ein iterierbares Objekt übergeben darf, dessen Objekte dann zu Listenelementen werden. (Mehr Infos zu weiteren Möglichkeiten unten)

Schauen wir uns das doch mal an:

>>> list() #leere Liste
[]
>>> list('Hallo') #aus iterable instanziieren
['H', 'a', 'l', 'l', 'o']

Ein String ist iterierbar, seine Teilobjekte sind Buchstaben, instanziiere ich also eine Liste, werden die Buchstaben des Strings zu Listenelementen.

range(num) wiederum erzeugt eine Klasse, die nacheinander die einzelnen Werte entsprechend der Parameter erzeugt. range() ist auch iterierbar.

>>> list(range(11))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(range(2,12))
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> list(range(2,12,5))
[2, 7]

Am besten schaust Du mal in die Dokumentation:

https://docs.python.org/3/library/stdtypes.html#typesseq-range

Hier wird die Range ausführlicher beschrieben, hier noch die Infos zur Liste:

https://docs.python.org/3/library/stdtypes.html#lists

my_list = list[range(11)]

Der Fehler kommt daher, dass in der Liste keine einzelnen Zahlen stehen, sondern nur ein Range-Objekt. Die Zeile bewirkt also nicht das was Du beabsichtigt hast.

Probiers mal mit

my_list = [i for i in range(11)]

RMDav 
Beitragsersteller
 06.02.2025, 18:05

Das funktioniert, danke. Dumme Frage zum Verständnis: Wenn ich nur die beiden my_list = () -Zeilen mit print ausgebe, erhalte ich jeweils eine Liste der Zahlen 0-10. Also tut die Zeile doch genau was ich wollte? Außerdem müsste es doch einen Syntax-Error melden, würden in der ersten Liste keine Zahlen stehen, oder nicht?