如何在Python3中从内部为循环增加迭代器?

如何在Python3中从内部为循环增加迭代器?,python,python-3.x,for-loop,iterator,Python,Python 3.x,For Loop,Iterator,我想在每次执行send命令时增加迭代器。现在,当执行for循环时,它只增加1。请告知 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 c

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

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

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

for
循环中不能这样做。因为每次循环重新启动时,它都会重新分配变量
i
(即使在循环内部更改了变量),并且每次只增加重新分配的变量。如果要执行此操作,最好使用
while
循环并手动增加一次性变量

for i in range(0,10):
    print(i)
    i +=2
    print("increased i", i)
>>i=0
>>>当我<10时:
...     印刷品(一)
...     i+=2
...     打印(“增加i”,i)
... 
0
(‘增加i’,2)
2.
(‘增加i’,4)
4.
(‘增加i’,6)
6.
(‘增加i’,8)
8.
(‘增加i’,10)
除此之外,如果您希望在某个时段增加变量,而不是基于某个特定条件,则可以使用适当的切片器对正在循环的iterable进行切片


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

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

>>> 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)
具有用于指定步骤的可选第三个参数。使用该值将计数器增加2。例如:

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

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

我写了类似的东西

for i in range(0, 10, 2):
    print(i)
    print("increased i", i)
为True时:
如果l<5:
打印“l in while”,l
l+=1
其他:
打破

现在我有一个完全的控制权,但背景是我必须检查所有的条件。

@ilaunchpad对不起,我知道现在发布这个已经太晚了,但这是你想要的

    while True:
        if l < 5:
            print "l in while", l
            l += 1
        else:
            break
在For语句中不应始终使用相同的变量

i=0
for J    in range(0,10):
    print(i)
    i = i + 2
print("increased i", i)
这个怎么样

范围(10)内的i的
:
如果i==3:
i+=1
持续
印刷品(一)
只需添加continue,计数器就会上升-打印结果为:

Output
vaibhav@vaibhav-Lenovo-G570:~$ python3 /home/vaibhav/Desktop/Python/pattern_test.py
0
2
4
6
8
10
12
14
16
18
increased i 20
请注意,如果没有continue,4将打印两次。
我认为这回答了这个问题。

由于没有答案允许使用下一个迭代器的结果,因此我建议的解决方案是,通过使用函数或仅使用函数,可以处理许多列表和ITerable:

x=[1,对,3,'4',5.05,6,7,8,9,10]
x_enum=枚举(x)
对于idx,x_枚举中的元素:
如果idx==1:#捕获元素的示例条件,我们希望在其中手动迭代
打印(“$:{}.”格式(elem))
idx,elem=next(x_enum)
打印(“$:{}.”格式(elem))
其他:
打印(elem)
将打印:

0
1
2
4
5
6
7
8
9
这也可以通过一个简单的迭代器实现:

x_iter=iter(x)
对于x_iter中的元素:
如果elem=='4':#捕获元素的示例条件,我们希望在其中手动迭代
打印(“$:{}.”格式(elem))
元素=下一个(x_iter)
打印(“$:{}.”格式(elem))
其他:
打印(elem)

对于第二个代码段,范围(0、10、3)也应该起作用。@Kasramvd感谢您的澄清。@user3757614因为OP希望根据条件增加变量,
范围中的
步骤
参数没有帮助。@ilaunchpad欢迎,您也可以通过接受答案来告诉社区;)。当OP希望将变量增加到1以上时,可能的重复操作没有多大帮助。实际上,当我们可以简单地使用
while
循环时,没有必要使任务变得如此复杂。@Kasramvd-这是使用迭代器时的一般模式。它可以是任何迭代器,而不仅仅是一个增加1的数字序列。如果要将迭代器前进一个以上的位置,请多次调用
next()。如果你真的想像c for循环一样直接使用和操作索引号,那么你不应该使用迭代器,而应该使用另一种方法(同意)。当你想迭代列表时,这种方法不起作用。谢谢你的编辑。当我最初写答案时,我觉得很好——代码不在文本中,也没有明显的方式添加代码。我认为,用“只思考”取代我的思考/希望,会让我想在回答中表现出的谦虚感消失殆尽。我在自己的代码中使用了这个想法,它确实有效,而且非常简单。
1
$: True        # As you can see, we are in the if block
$: 3           # This is the second print statement, which uses the result of next()
4
5.05
6
7
8
9
10