web-dev-qa-db-de.com

wie kann man den Iterator von innen für die Schleife in Python 3 inkrementieren?

for i in range (0, 81):
    output = send command
    while True:
        last_byte = last_byte - offset
    if last_byte > offset:
       output = send command
       i+
    else:
        output = send command
        i+
        break

Ich möchte den Iterator jedes Mal erhöhen, wenn der Sendebefehl ausgeführt wird. Momentan erhöht es sich nur um eins, wenn die for-Schleife ausgeführt wird. Bitte beraten 

for i in range(0,10):
    print(i)
    i +=2
    print("increased i", i)

Ich lief diesen Code aus, und er lief von 0 bis 9 aus. Ich hatte erwartet, dass sich der Iterator um 2 erhöhen würde.

13
ilaunchpad

Speichern Sie eine Kopie des Iterators als benanntes Objekt. Dann können Sie vorausgehen, wenn Sie möchten.

>>> myiter = iter(range(0, 10))
>>> for i in myiter:
    print(i)
    next(myiter, None)
...
0
2
4
6
8
12
Matt Anderson

In einer for-Schleife ist das nicht möglich. Denn bei jedem Neustart der Schleife wird die Variable i neu zugewiesen (auch nachdem Sie sie innerhalb der Schleife geändert haben) und jedes Mal, wenn Sie die neu zugewiesene Variable erhöhen. Wenn Sie dies tun möchten, verwenden Sie besser eine while-Schleife und erhöhen Sie die Einwegvariable manuell.

>>> i=0
>>> while i< 10 :
...     print(i)
...     i +=2
...     print("increased i", i)
... 
0
('increased i', 2)
2
('increased i', 4)
4
('increased i', 6)
6
('increased i', 8)
8
('increased i', 10)

Wenn Sie die Variable nicht auf einer bestimmten Bedingung, sondern auf einer bestimmten Periode erhöhen möchten, können Sie außerdem die richtigen Slicer verwenden, um die Iteration zu schneiden, in der Sie eine Schleife bilden.

Wenn Sie beispielsweise einen Iterator haben, können Sie itertools.islice() verwenden. Wenn Sie über eine Liste verfügen, können Sie beim Indizieren (my_list[start:end:step]) einfach Schritte verwenden.

6
Kasrâmvd

range() hat einen optionalen dritten Parameter zur Angabe des Schritts. Verwenden Sie dies, um den Zähler um zwei zu erhöhen. Zum Beispiel: 

for i in range(0, 10, 2):
    print(i)
    print("increased i", i)

Der Grund, dass Sie i nicht wie eine normale Variable inkrementieren können, liegt darin, dass beim Starten der for-Schleife eine Liste (oder ein Bereichsobjekt in Python 3+) erstellt wird und i lediglich jeden Wert in diesem Objekt inkrementell darstellt.

2
pzp

@ilaunchpad Sorry, ich weiß, es ist zu spät, um dies zu posten, aber hier ist was Sie gesucht haben

i=0
for J    in range(0,10):
    print(i)
    i = i + 2
print("increased i", i)

Sie sollten nicht dieselbe Variable in der For-Anweisung verwenden.

Output
[email protected]:~$ python3 /home/vaibhav/Desktop/Python/pattern_test.py
0
2
4
6
8
10
12
14
16
18
increased i 20
1
user7422128