Skip to content

for-Schleife in Python (mit range, enumerate, zip, etc.)

Python

Dieser Artikel genau, wie SIE die for-Schleife in Python verwenden.

  • Grundlagen der Schleife in Python
    • for-Anweisung in Python
    • Beenden Sie die for-Schleife:break
    • Fahren Sie mit dem nächsten Zyklus fort:continue
    • Nach normaler Ausführung:else
  • Funktionen, die in for-Anweisungen nützlich sind
    • Nur einige Elemente extrahieren: Slice
    • Zähler (Index):range()
    • Elemente und Zähler:enumerate()
    • Mehrfach anhören:zip()
    • Mehrere Listen und Zähler:enumerate(), zip()
    • Umgekehrte Reihenfolge:reversed()
    • Verschachtelte Schleifen:itertools.product()
  • Andere Themen
    • dict in for statement
    • Verständnis aufhören

Im following Artikel FINDEN SIE Eine Schleife mit while-Anweisung, die wiederholt WIRD, solange der Bedingungsausdruck True ist.

for-Anweisung in Python

Eine for-Anweisung (for-Schleife) wird in vielen Programmiersprachen wie C mit einer Zählervariablen und einer Fortsetzungsbedingung geschrieben.

for(int i = 0; i < 10; i++)
    ...

Im Gegensatz zu C wird die for-Anweisung in Python wie folgt geschrieben. Sie können einen beliebigen Namen auf eine Variable setzen.

for variable in iterable object:
    ...

Einer foreach-Anweisung in anderen Sprachen werden Elemente von iterierbaren Objekten wie Listen sequentiell Variablen zugewiesen und verarbeitet. Der Vorgang wird für alle Elemente wiederholt.

l = ['Alice', 'Bob', 'Charlie']

for name in l:
    print(name)
# Alice
# Bob
# Charlie

Beenden Sie die for-Schleife:break

Sie can die for-Schleife mit break beenden.

l = ['Alice', 'Bob', 'Charlie']

for name in l:
    if name == 'Bob':
        print('!!BREAK!!')
        break
    print(name)
# Alice
# !!BREAK!!

Weitere Informationen zur if-Anweisung FINDEN SIE im following Artikel.

Fahren Sie mit dem nächsten Zyklus fort:continue

Sie können den Zyklus überspringen und mit Continue zum nächsten fortfahren.

break beendet die gesamte for-Schleife, aber Continue überspringt nur den Code nach der Continue-Anweisung im Zyklus.

l = ['Alice', 'Bob', 'Charlie']

for name in l:
    if name == 'Bob':
        print('!!SKIP!!')
        continue
    print(name)
# Alice
# !!SKIP!!
# Charlie

Nach normaler Ausführung:else

Use SIE else, um etwas auszuführen, after sterben for-Schleife erfolgreich abgeschlossen wurde.

l = ['Alice', 'Bob', 'Charlie']

for name in l:
    print(name)
else:
    print('!!FINISH!!')
# Alice
# Bob
# Charlie
# !!FINISH!!

If die for-Schleife durch break beendet WIRD, WIRD die Suite in der else-Klausel nicht ausgeführt.

for name in l:
    if name == 'Bob':
        print('!!BREAK!!')
        break
    print(name)
else:
    print('!!FINISH!!')
# Alice
# !!BREAK!!

Im Falle von Continue wird die Suite in der Else-Klausel ausgeführt.

for name in l:
    if name == 'Bob':
        print('!!SKIP!!')
        continue
    print(name)
else:
    print('!!FINISH!!')
# Alice
# !!SKIP!!
# Charlie
# !!FINISH!!

Durch die Verwendung von else und Continue can Sie verschachtelte Schleifen (mehrere Schleifen) verlassen. Nichts finden Sie im folgenden Artikel.

Wenn Sie nur einige Elemente extrahieren möchten, geben Sie den Bereich mit einem Slice wie [start:stop] an. Geben Sie für Start und Stopp den Index beginnend mit 0 an. Beachten Sie, dass das Element an der Position von Stopp nicht enthalten ist.

l = ['A', 'B', 'C', 'D', 'E', 'F', 'G']

for c in l[2:5]:
    print(c)
# C
# D
# E

Sie können start und stop weglassen oder das Element für jeden Schritt mit [start:stop:step] erhalten. Ein Beispiel für das Extrahieren von nur ungeradzahlig indizierten Elementen und geradzahlig indizierten Elementen ist wie folgt.

for c in l[::2]:
    print(c)
# A
# C
# E
# G

for c in l[1::2]:
    print(c)
# B
# D
# F

Weitere Informationen zu Slice finden Sie im following Artikel.

Zähler (Index):range()

Sie können den Zähler (Index) in der for-Schleife durch range() erhalten.

for i in range(3):
    print(i)
# 0
# 1
# 2

range() gibt ein Objekt vom Typ range zurück.

print(range(3))
print(type(range(3)))
# range(0, 3)
# <class 'range'>

Konvertieren Sie es zur Erklärung mit list() in einer Liste. Sie müssen es nicht in einer Liste umwandeln, wenn Sie es in einer for-Anweisung wie im Beispielbeispiel verwenden.

range(stop) gibt Zahlen von 0 <= i <stop zurück.

print(list(range(3)))
# [0, 1, 2]

print(list(range(6)))
# [0, 1, 2, 3, 4, 5]

Wenn Sie einen Bereich angeben möchten, geben Sie zwei Argumente wie range(start, stop) an.

print(list(range(10, 13)))
# [10, 11, 12]

If you step angeben möchten, geben SIE drei Argumente wie range(start, stop, step) an.

print(list(range(0, 10, 3)))
# [0, 3, 6, 9]

print(list(range(10, 0, -3)))
# [10, 7, 4, 1]

Ein Beispiel für die For-Anweisung ist wie folgt.

for i in range(10, 0, -3):
    print(i)
# 10
# 7
# 4
# 1

Notebooks zu range() finden Sie im following Artikel.

Elemente und Zähler:enumerate()

Sie können das Element und den Zähler (Index) gleichzeitig mit enumerate() erhalten.

l = ['Alice', 'Bob', 'Charlie']

for name in l:
    print(name)
# Alice
# Bob
# Charlie

for i, name in enumerate(l):
    print(i, name)
# 0 Alice
# 1 Bob
# 2 Charlie

Als zweites Argument von enumerate() kann ein Startwert angegeben werden.

for i, name in enumerate(l, 1):
    print(i, name)
# 1 Alice
# 2 Bob
# 3 Charlie

for i, name in enumerate(l, 42):
    print(i, name)
# 42 Alice
# 43 Bob
# 44 Charlie

enumerate() hat kein Argument, um step wie range() anzugeben, aber es kann wie folgt gemacht werden.

step = 3
for i, name in enumerate(l):
    print(i * step, name)
# 0 Alice
# 3 Bob
# 6 Charlie

Mehrfach anhören:zip()

Mehrere iterierbare Objekte können von zip() behandelt werden.

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18

Es ist auch möglich, drei oder mehr iterierbare Objekte zu kombinieren.

points = [100, 85, 90]

for name, age, point in zip(names, ages, points):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 90

Siehe den folgenden Artikel für Details, z. B. wenn die Anzahl der Elemente unterschiedlich ist.

Wie im obigen Beispiel gibt zip() die Elemente mehrerer iterierbarer Objekte der Reihe nach zurück. Wenn Sie alle Kombinationen von mehreren iterierbaren Objekten erhalten möchten, verwenden Sie itertools.product(), das später beschrieben wird.

Mehrere Listen und Zähler:enumerate(), zip()

Sie können enumerate() und zip() zusammen verwenden. Beachten SIE, dass ganze Variablennamen für zip() in Klammern () eingeschlossen werden müssen.

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for i, (name, age) in enumerate(zip(names, ages)):
    print(i, name, age)
# 0 Alice 24
# 1 Bob 50
# 2 Charlie 18

Umgekehrte Reihenfolge:reversed()

Sie können die Elemente eines iterierbaren Objekts in umgekehrter Reihenfolge mit reversed() erhalten.

l = ['Alice', 'Bob', 'Charlie']

for name in reversed(l):
    print(name)
# Charlie
# Bob
# Alice

Das Bereichsobjekt kann auch umgekehrt werden. Sie können einen negativen Wert für Schritt angeben, ohne reversed() zu verwenden.

for i in reversed(range(3)):
    print(i)
# 2
# 1
# 0

for i in range(2, -1, -1):
    print(i)
# 2
# 1
# 0

Das Aufzählungsobjekt kann nicht rückgängig gemacht werden. Sie müssen es mit list() in eine Liste umwandeln.

# for i, name in reversed(enumerate(l)):
#     print(i, name)
# TypeError: 'enumerate' object is not reversible

for i, name in reversed(list(enumerate(l))):
    print(i, name)
# 2 Charlie
# 1 Bob
# 0 Alice

Wenn Sie den Index nicht umkehren möchten, verwenden Sie reversed() innerhalb von enumerate().

for i, name in enumerate(reversed(l)):
    print(i, name)
# 0 Charlie
# 1 Bob
# 2 Alice

Das Zip-Objekt kann nicht rückgängig gemacht werden. Sie müssen es mit list() in eine Liste umwandeln.

l2 = [24, 50, 18]

# for name, age in reversed(zip(l, l2)):
#     print(name, age)
# TypeError: 'zip' object is not reversible

for name, age in reversed(list(zip(l, l2))):
    print(name, age)
# Charlie 18
# Bob 50
# Alice 24

Sie können verschachtelte Schleifen in Python wie folgt schreiben. In Python werden Blöcke durch Einzüge dargestellt, fügen Sie also einfach weitere Einzüge hinzu.

l1 = [1, 2, 3]
l2 = [10, 20, 30]

for i in l1:
    for j in l2:
        print(i, j)
# 1 10
# 1 20
# 1 30
# 2 10
# 2 20
# 2 30
# 3 10
# 3 20
# 3 30

Sie können das gleiche Ergebnis mit itertools.product() erhalten.

import itertools

l1 = [1, 2, 3]
l2 = [10, 20, 30]

for i, j in itertools.product(l1, l2):
    print(i, j)
# 1 10
# 1 20
# 1 30
# 2 10
# 2 20
# 2 30
# 3 10
# 3 20
# 3 30

Es ist auch möglich, drei oder mehr Iterables als Argumente an itertools.product() zu übergeben. Nichts finden Sie im folgenden Artikel.

Wenn Sie innerhalb der mehreren Schleifen mit Pause aus der Schleife ausbrechen möchten, können Sie einfach itertools.product() verwenden.

dict in for statement

Das dict-Objekt in der for-Anweisung gibt Schlüssel zurück.

d = {'key1': 1, 'key2': 2, 'key3': 3}

for k in d:
    print(k)
# key1
# key2
# key3

Wenn Sie Werte oder Schlüssel-Wert-Paare erhalten möchten, verwenden Sie values() und items().

for v in d.values():
    print(v)
# 1
# 2
# 3
for k, v in d.items():
    print(k, v)
# key1 1
# key2 2
# key3 3

Nichts finden Sie im folgenden Artikel.

Verständnis aufhören

Um eine neue Liste durch die Verarbeitung der Elemente von iterierbaren Objekten zu generieren, ist es einfacher, Listen Comprehensions zu verwenden als sterben for-Anweisung.

Das Hörverständnis wird wie folgt geschrieben.

[expression for variable_name in iterable]

Beispiele für Listenverständnisse und for-Anweisungen sind wie folgt. Hörverständnisse sind prägnanter.

squares = [i**2 for i in range(5)]
print(squares)
# [0, 1, 4, 9, 16]
squares = []
for i in range(5):
    squares.append(i**2)

print(squares)
# [0, 1, 4, 9, 16]

Im following Artikel FINDEN SIE Notebooks zu Listenverständnissen.