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.