【问题标题】:Control the index of a Python for loop控制 Python for 循环的索引
【发布时间】:2013-03-20 09:31:02
【问题描述】:

如何控制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 循环并控制我的索引。

【问题讨论】:

  • 看起来您实际上想要对列表进行设置操作。你看过布景吗?
  • @Chris 这在这种情况下并不适用,谢谢。
  • @cmd 我认为 while 循环将是可行的方法。
  • "我问这个问题的原因是因为有时我会删除人 i。"所以你要从你正在迭代的序列中删除对象?不要那样做。建立一个只包含您想要的列表的新列表。

标签: python for-loop


【解决方案1】:

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

你不能/不应该 - 循环控制变量将在每次迭代结束时重新分配给你正在迭代的任何元素的下一个元素(这样i = i + 1没有效果,因为i 无论如何都会被重新分配给下一次迭代的不同的东西)。如果你想这样控制索引,你应该使用while-loop:

i = 0
while i < 10:
    print i
    i = i + 1

尽管 Python 的 range 函数比您想象的更灵活。例如,要以 2 步进行迭代,您可以简单地使用类似

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

【讨论】:

  • 我就是这么想的。两两增加(或类似的东西)并不是我真正想要的。所以,while循环它是。谢谢!我将对此进行更多研究,然后在我对解决方案有信心时接受答案。
【解决方案2】:

查看rangehere 上的文档,或从 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

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

【讨论】:

  • 我在测试时意识到(i=i+1 毫​​无意义)。我很失望。我认为 while 循环是要走的路,但以两个(或类似的东西)递增并不能解决我的问题。不过谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-09-09
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 2011-12-07
  • 1970-01-01
相关资源
最近更新 更多