控制Python for循环的索引

4

如何控制Python的for循环索引?(或者你可以吗?或者应该吗?)

例如:

for i in range(10):
    print i
    i = i + 1

产出:

0
1
2
3
4
5
6
7
8
9

我希望它可以产生以下结果:

0
2
3
4
5
6
7
8
9
10

如果我这个问题完全偏离了轨道,我真的很抱歉。我当前的脑回路有些混乱,解决方案可能很明显。


为什么我要问这个问题?

这与问题无关,但与我需要答案的原因相关。

在我写的Python脚本中,我正在做以下操作:

for i in persons:
    for j in persons[-1(len(persons) - i - 1:]:
        if j.name in i.name:
            #remove j.name
        else: 
            #remove i.name

    #For every person (i), iterate trough every other person (j) after person (i)
    #The reason I ask this question is because sometimes I will remove person i.
    #When that happens, the index still increases and jumps over the person after i
    #So I want to decrement the index so I don't skip over that person.

也许我完全走了弯路,也许 我应该使用 while 循环来控制索引。

请参见:https://dev59.com/YXA75IYBdhLWcg3w_umD - Chris
你似乎想在列表上进行集合操作。你看过集合吗? - cmd
@Chris 在这种情况下并不适用,谢谢。 - Jordan Carroll
@cmd 我认为使用 while 循环是最好的方法。 - Jordan Carroll
我问这个问题的原因是因为有时候我会从正在迭代的序列中删除对象。不要这样做。相反,建立一个只包含你想要的对象的新列表。 - DSM
提供更多关于您想要实现的信息将有助于我们为您提供巧妙的方法。但是,是的,您可以使用索引。只是这样做似乎有点可惜。 - cmd
2个回答

6
您如何控制Python for循环的索引?(或者能否控制?或者应该吗?)
您无法/不应该这样做 - 循环控制变量将在每次迭代结束时重新分配给您正在迭代的任何内容的下一个元素(因此,i = i + 1没有影响,因为i将被重新分配为下一次迭代的不同内容)。 如果您想以这种方式控制索引,则应使用while循环:
i = 0
while i < 10:
    print i
    i = i + 1

虽然Python的range函数比你想象的更加灵活。例如,要按步长为2进行迭代,你可以简单地使用以下语句:

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

这正是我在想的。递增两个(或类似的东西)并不是我真正想要的。所以,使用while循环吧。谢谢!我会再仔细研究一下,然后在对解决方案有信心时接受答案。 - Jordan Carroll

0

查看关于range的文档在这里, 或者从docstr中查看:

range([start,] stop[, step]) -> list of integers

Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3].  The end point is omitted!
These are exactly the valid indices for a list of 4 elements.

要获取0-10的范围,只需执行以下操作:

> for i in range(0, 11):
>     print i

> 0
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> 10

顺便说一下,在 for 循环中执行 i = i + 1 是没有意义的,因为每次循环迭代都会再次修改 i 的值。无论你在循环中将其设置为什么值,每次循环重新开始时都会被覆盖。

当我测试时,我意识到(i=i+1是无意义的)。我感到非常失望。不过我认为使用while循环是解决问题的方法,以两个为单位递增(或类似的方式)并不能解决我的问题。还是谢谢! - Jordan Carroll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接