Routineaufgaben mit Python automatisieren. Al Sweigart

Читать онлайн книгу.

Routineaufgaben mit Python automatisieren - Al Sweigart


Скачать книгу
Strings oder Integer. Wenn Sie Folgendes in die interaktive Shell eingeben, erhalten Sie die Fehlermeldung AttributeError:

      >>> eggs = 'hello'

      >>> eggs.append('world')

      Traceback (most recent call last):

      File "<pyshell#19>", line 1, in <module>

      eggs.append('world')

      AttributeError: 'str' object has no attribute 'append'

      >>> bacon = 42

      >>> bacon.insert(1, 'world')

      Traceback (most recent call last):

      File "<pyshell#22>", line 1, in <module>

      bacon.insert(1, 'world')

      AttributeError: 'int' object has no attribute 'insert'

       Elemente mit remove() aus Listen entfernen

      Wenn Sie die Methode remove() für eine Liste aufrufen, übergeben Sie ihr den Wert, den Sie aus dieser Liste entfernen möchten. Probieren Sie das wie folgt in der interaktiven Shell aus:

      >>> spam = ['cat', 'bat', 'rat', 'elephant']

      >>> spam.remove('bat')

      >>> spam

      ['cat', 'rat', 'elephant']

      Wenn Sie versuchen, einen Wert aus einer Liste zu entfernen, der gar nicht vorhanden ist, erhalten Sie den Fehler ValueError:

      >>> spam = ['cat', 'bat', 'rat', 'elephant']

      >>> spam.remove('chicken')

      Traceback (most recent call last):

      File "<pyshell#11>", line 1, in <module>

      spam.remove('chicken')

      ValueError: list.remove(x): x not in list

      Kommt der Wert mehrmals in der Liste vor, so wird nur das erste Vorkommen entfernt:

      >>> spam = ['cat', 'bat', 'rat', 'cat', 'hat', 'cat']

      >>> spam.remove('cat')

      >>> spam

      ['bat', 'rat', 'cat', 'hat', 'cat']

      Wenn Sie den Index des Elements kennen, das Sie aus einer Liste löschen wollen, können Sie die Anweisung del verwenden; kennen Sie dagegen den Wert des Elements, so nutzen Sie zum Entfernen remove().

       Elemente in einer Liste mit sort() sortieren

      Listen von Zahlenwerten oder Strings lassen sich mit der Methode sort() sortieren. Betrachten Sie dazu das folgende Beispiel:

      >>> spam = [2, 5, 3.14, 1, -7]

      >>> spam.sort()

      >>> spam

      [-7, 1, 2, 3.14, 5]

      >>> spam = ['ants', 'cats', 'dogs', 'badgers', 'elephants']

      >>> spam.sort()

      >>> spam

      ['ants', 'badgers', 'cats', 'dogs', 'elephants']

      Wenn Sie True für das Schlüsselwortargument reverse übergeben, sortiert sort() die Elemente in umgekehrter Reihenfolge:

      >>> spam.sort(reverse=True)

      >>> spam

      ['elephants', 'dogs', 'cats', 'badgers', 'ants']

      Bei der Verwendung von sort() müssen Sie drei Dinge beachten. Erstens sortiert sort() die Liste unmittelbar. Versuchen Sie also nicht, den Rückgabewert zu erfassen, indem Sie Code wie spam = spam.sort() schreiben.

      Zweitens können Sie keine Listen sortieren, in denen sowohl Zahlen als auch Strings vorkommen, da Python solche unterschiedlichen Werte nicht vergleichen kann. Bei dem folgenden Beispiel ergibt sich daher der Fehler TypeError:

      >>> spam = [1, 3, 2, 4, 'Alice', 'Bob']

      >>> spam.sort()

      Traceback (most recent call last):

      File "<pyshell#70>", line 1, in <module>

      spam.sort()

      TypeError: '<' not supported between instances of 'str' and 'int'

      Drittens verwendet sort() statt der normalen alphabetischen Sortierung eine ASCII-Sortierung. Das bedeutet, dass alle Großbuchstaben vor den Kleinbuchstaben angeordnet werden. Ein kleines a steht daher hinter dem großen Z! Das können Sie an folgendem Beispiel erkennen:

      >>> spam = ['Alice', 'ants', 'Bob', 'badgers', 'Carol', 'cats']

      >>> spam.sort()

      >>> spam

      ['Alice', 'Bob', 'Carol', 'ants', 'badgers', 'cats']

      Wenn Sie die Werte in regulärer alphabetischer Reihenfolge sortieren müssen, übergeben Sie im Aufruf der Methode sort() den Wert str.lower für das Schlüsselwortargument key:

      >>> spam = ['a', 'z', 'A', 'Z']

      >>> spam.sort(key=str.lower)

      >>> spam

      ['a', 'A', 'z', 'Z']

      Dadurch behandelt sort() alle Elemente in der Liste so, als begännen sie mit einem Kleinbuchstaben, ohne sie aber tatsächlich zu ändern.

       Reihenfolge der Listeneinträge mit reverse() umkehren

      Wenn Sie die Reihenfolge der Einträge in einer Liste einfach nur umkehren müssen, rufen Sie dazu die Listenmethode reverse() auf:

      >>> spam = ['cat', 'dog', 'moose']

      >>> spam.reverse()

      >>> spam

      ['moose', 'dog', 'cat']

      Ebenso wie sort() gibt auch reverse() keine neue Liste zurück, weshalb Sie spam.reverse() schreiben müssen und nicht spam = spam.reverse().

       Ausnahmen von den Einrückungsregeln in Python

      In den meisten Fällen erkennt Python anhand der Tiefe der Einrückung, zu welchem Block eine Codezeile gehört. Es gibt jedoch einige Ausnahmen von dieser Regel. Eine davon sind Listen, die mehrere Zeilen einer Quellcodedatei umfassen können. Dabei spielt die Einrückung keine Rolle, denn Python weiß, dass die Liste erst mit der schließenden eckigen Klammer endet. Daher könnten Sie Ihren Code auch wie folgt schreiben:

      spam = ['apples',

      'oranges',

      'bananas',

      'cats']

      print(spam)

      In der Praxis sollten Sie Ihren Code so schreiben, dass die Listen klar und übersichtlich


Скачать книгу