如何在Python 3的for循环内增加迭代器?

2024-04-25 21:13:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想在每次执行send命令时增加迭代器。现在执行for循环时它只增加一个。请告知

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

我运行了这段代码,结果是从0到9。我原以为它会把迭代器增加2。


Tags: insendtrueforoutputifrangebyte
3条回答

for循环中不能这样做。因为每次循环重新启动时,它都会重新分配变量i(即使在循环内部更改了它之后),每次只需增加重新分配的变量。如果您想这样做,最好使用while循环并手动增加throwaway变量。

>>> 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)

除此之外,如果您想在一个句点上增加变量,而不是基于某个特定条件,您可以使用适当的切片器来切片循环的iterable。

例如,如果有迭代器,可以使用itertools.islice();如果有列表,则可以在索引(my_list[start:end:step])时简单地使用步骤。

将迭代器的副本另存为命名对象。如果你想的话,你可以跳到前面。

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

^{}有一个可选的第三个参数来指定步骤。用它把计数器增加两个。例如:

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

不能像普通变量一样递增i的原因是,当for循环开始执行时,会创建一个列表(或Python 3+中的range对象),而i只是递增地表示该对象中的每个值。

相关问题 更多 >