Python Listen erstellen und bearbeiten

Ein einfaches Array – Python List

Listen in Python zu erstellen und zu bearbeiten ist mit nur wenigen Schritten möglich. Deswegen zeige ich hier, wie es geht:

Erstellen einer Liste

Arrays bzw Listen können in Python ähnlich zu anderen Programmiersprachen benutzt werden. Eine Liste erstellt man mit Hilfe von eckigen Klammern. Die Werte einer Liste können unterschiedlichen Typs sein und werden per Komma getrennt.

>>> my_list = ['a', 'b', 1, 2, ['c', 3], {'key': 'value'}]

Unsere Liste enthält Strings und Integers, eine weitere Liste und auch ein Dictionary.

Zugriff auf Elemente einer Liste

Der Zugriff auf einzelne Elemente einer Liste kann über die genaue Angabe der Listenposition erfolgen. Diese Listenposition heißt Index. Ist das selektierte Element der Liste ebenso eine Liste, kann man erneut über den Index auf ein Element dieser zweiten Liste zugreifen.

>>> my_cars = ['Audi', 'Mercedes', 'BMW', ['VW Golf', 'VW Passat'], 'Ford']
>>> my_cars[3]
['VW Golf', 'VW Passat']

>>> my_cars[3][0]  
# returns the 1st element from the object 
# at index 3 of the my_cars list 
'VW Golf'

Listen bearbeiten: Element einer Liste verändern

Möchte man ein Element einer Liste verändern, so kann das durch den oben beschriebenen Zugriff über die Index Position erfolgen wobei anschließend ein neuer Wert zugewiesen wird.

>>> my_cars = ['Audi', 'Mercedes', 'BMW', ['VW Golf', 'VW Passat'], 'Ford']
>>> my_cars[3] = 'Chevrolet'
>>> my_cars
['Audi', 'Mercedes', 'BMW', 'Chevrolet', 'Ford']

Eine Liste sortieren

Auch ein einfaches Sortieren ist problemlos möglich.

>>> my_cars.sort()
>>> my_cars
['Audi', 'BMW', 'Chevrolet', 'Ford', 'Mercedes']
>>> my_cars.sort(reverse=True)
>>> my_cars
['Mercedes', 'Ford', 'Chevrolet', 'BMW', 'Audi']

Die Länge einer Liste ermitteln

Greift man auf eine Position einer Liste zu, die nicht existiert, führt das zu einem Fehler. Um die Länge einer Liste zu ermitteln, kann daher die len() Funktion benutzt werden.

>>> my_cars[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

>>> len(my_cars)
4

So kann zum Beispiel ermittelt werden, ob sich überhaupt Elemente in der Liste befinden. Anschließend kann dann die Bearbeitung erfolgen, oder z.B. abgebrochen werden.

>>> if len(my_cars) > 0:
...     print(my_cars[0])
... else:
...     print("empty list")
... 
Audi
>>> empty_list = []
>>> if len(empty_list) > 0:
...     print(empty_list[0])
... else:
...     print("empty list")
... 
empty list

Eine Kurzform dieser speziellen Prüfung kann mit Listen auch in der folgenden Schreibweise erfolgen. „if my_cars“ gibt False zurück, wenn die Liste leer oder die Variable None ist, andernfalls True.

>>> if my_cars:
...     print(my_cars[0])
... else:
...     print("empty list")
... 
Audi
>>> if empty_list:
...     print(empty_list[0])
... else:
...     print("empty list")
... 
empty list
>>> if not empty_list:
...     print("still empty")
... 
still empty

weitere Listen Methoden

Im folgenden Abschnitt beschreibe ich weitere Methoden, und wie ich diese auf Listen anwende.

.append(x)

Wird benutzt um ein weiteres Element an das Ende einer Liste anzufügen.

>>> my_cars.append('Skoda')
>>> my_cars
['Audi', 'Mercedes', 'BMW', ['VW Golf', 'VW Passat'], 'Ford', 'Skoda']

.extend(iterable)

Änhlich wie .append(x) nur, dass hier ein iterierbares Objekt, also z.B. eine Liste oder ein Dictionary (Achtung, hier werden nur die Schlüssel des Dictionaries verwendet) an das Ende der ursprünglichen Liste angefügt wird..

>>> my_cars.extend(['Seat', 'Peugeot'])
>>> my_cars
['Audi', 'Mercedes', 'BMW', ['VW Golf', 'VW Passat'], 'Ford', 'Skoda', 'Seat', 'Peugeot']
>>> my_cars.extend({'Porsche': '911', 'Ferrari': {'Farbe': 'rot'}})
>>> my_cars
['Audi', 'Mercedes', 'BMW', ['VW Golf', 'VW Passat'], 'Ford', 'Skoda', 'Seat', 'Peugeot', 'Porsche', 'Ferrari']

.insert(i, x)

Fügt ein Element x vor Position i in die Liste ein. Möchte man also ein Element an den Anfang einfügen, wäre hier .insert(0, x) zu benutzen.

>>> my_cars.insert(0, 'Trabant')
>>> my_cars
['Trabant', 'Audi', 'Mercedes', 'BMW', ['VW Golf', 'VW Passat'], 'Ford', 'Skoda', 'Seat', 'Peugeot', 'Porsche', 'Ferrari']
>>> my_cars[4].insert(1, 'VW Polo')
>>> my_cars
['Trabant', 'Audi', 'Mercedes', 'BMW', ['VW Golf', 'VW Polo', 'VW Passat'], 'Ford', 'Skoda', 'Seat', 'Peugeot', 'Porsche', 'Ferrari']

.index(x[ , start[, end]])

Da wir inzwischen einige neue Elemente in die Liste eingefügt haben, wissen wir eventuell nicht mehr, an welcher Position sich ein gewünschtes Element befinden. Wo ist jetzt der ‚Ford‘ geblieben?

Mit der .index Methode können wir die Position des ersten Treffers finden, beginnden bei 0.

>>> my_cars.index('Ford')
5

Die Parameter ’start‘ und ‚end‘ können benutzt werden, um nur Teile der Liste zu durchsuchen. Gibt es noch einen weiteren ‚Ford‘ in der Liste? Suchen wir also beginnend von Position 6 bis zum Ende:

>>> my_cars.index('Ford', 6)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'Ford' is not in list

Oder aber wir suchen nur von Element 3 bis 6, weil wir evtl ausschließen können, dass sich ein Ford in den anderen Teilen der Liste befindet.:

>>> my_cars.index('Ford', 3, 6)
5

.remove(x)

Entfernt das erste Element aus der Liste, welches gefunden wird. Den Ford brauchen wir nicht mehr, also raus damit:

>>> my_cars.remove('Ford')
>>> my_cars
['Trabant', 'Audi', 'Mercedes', 'BMW', ['VW Golf', 'VW Polo', 'VW Passat'], 'Skoda', 'Seat', 'Peugeot', 'Porsche', 'Ferrari']

Ein weiteres mal finden wir keinen Ford mehr in der Liste, daher gibt es eine Fehlermeldung.

>>> my_cars.remove('Ford')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

.pop([i])

Entfernt entweder das letzte Element der Liste oder das mit Position i angegebene Element und gibt dieses zurück.

>>> car = my_cars.pop()
>>> car
'Ferrari'

>>> car = my_cars.pop(2)
>>> car
'Mercedes'

>>> my_cars
['Trabant', 'Audi', 'BMW', ['VW Golf', 'VW Polo', 'VW Passat'], 'Skoda', 'Seat', 'Peugeot', 'Porsche']

del my_cars[x]

Mit dem del Statement können einzelne Elemente oder ganze Blöcke aus einer Liste entfernt werden ohne diese zurückzugeben.

>>> del my_cars[1]
>>> my_cars
['Trabant', 'BMW', ['VW Golf', 'VW Polo', 'VW Passat'], 'Skoda', 'Seat', 'Peugeot', 'Porsche']
>>> del my_cars[2:4]
>>> my_cars
['Trabant', 'BMW', 'Seat', 'Peugeot', 'Porsche']
>>> del my_cars[:]
>>> my_cars
[]

Zunächst entferne ich nur das Auto an Index Position 1, den Audi. Anschließend entferne ich die Autos 2 bis 4, also die VWs, den Skoda und den Seat und zuletzt leere ich die komplette Liste bzw entferne von Beginn bis zum Ende alle Elemente.

Die Schreibweise bei den letzten beiden del Statements nennt man slicing.

Listen zerlegen (slicing)

Um eine Liste in mehrere Teile zu zerlegen, kann man die erweitere Indexing Syntax benutzen. Diese Technik nennt sich slicen und findet sehr häufig auch bei anderen iterierbaren Objekten Anwendung.

Wir möchten unsere Cars Liste gern in zwei neue Listen aufteilen.

>>> my_cars
['Trabant', 'Audi', 'BMW', ['VW Golf', 'VW Polo', 'VW Passat'], 'Skoda', 'Seat', 'Peugeot', 'Porsche']

>>> my_cars[0:4]
['Trabant', 'Audi', 'BMW', ['VW Golf', 'VW Polo', 'VW Passat']]
>>> my_cars[4:8]
['Skoda', 'Seat', 'Peugeot', 'Porsche']

Dabei kann auch eine Schrittzahl angegeben werden, z.B. könnte man nur jedes zweite Element in die neue Liste wählen:

>>> my_cars[0:8:2]
['Trabant', 'BMW', 'Skoda', 'Peugeot']

Selektiert man vom Anfang und / oder bis zum Ende, können die Argumente für start und end leer gelassen werden. Alternativ kann man auch relative Argumente angeben, z.B. die letzten 3 Elemente mit ‚-3:‘ oder alle Elemente bis auf die letzten 2 mit ‚:-2‘

>>> my_cars[::2]
['Trabant', 'BMW', 'Skoda', 'Peugeot']
>>> my_cars[1::2]
['Audi', ['VW Golf', 'VW Polo', 'VW Passat'], 'Seat', 'Porsche']
>>> my_cars[:6:2]
['Trabant', 'BMW', 'Skoda']
>>> my_cars[:4]
['Trabant', 'Audi', 'BMW', ['VW Golf', 'VW Polo', 'VW Passat']]
>>> my_cars[4:]
['Skoda', 'Seat', 'Peugeot', 'Porsche']
>>> my_cars[:]
['Trabant', 'Audi', 'BMW', ['VW Golf', 'VW Polo', 'VW Passat'], 'Skoda', 'Seat', 'Peugeot', 'Porsche']
>>> my_cars[-3:]
['Seat', 'Peugeot', 'Porsche']
>>> my_cars[:-2]
['Trabant', 'Audi', 'BMW', ['VW Golf', 'VW Polo', 'VW Passat'], 'Skoda', 'Seat']

Die umfassende englische Dokumentation für Listen und deren Methoden und viele weitere Beispiele finden sich hier.

Wer nun noch wissen möchte, wie man effektiv und mit wenig Code neue Listen aus seinen Datenbergen erstellen kann, der lese meinen Artikel zu List Comprehensions.

Eine Antwort auf „Python Listen erstellen und bearbeiten“

Kommentare sind geschlossen.