在Python中操作for循环的索引

3

能否在Python for循环中操纵索引指针?

例如,PHP中的以下示例将打印1 3

$test = array(1,2,3,4);
for ($i=0; $i < sizeof($test); $i++){
    print $test[$i].' ';
    $i++;
}

然而在Python中,当我尝试增加索引时没有效果。例如,以下代码将会打印出所有数字:
test = ['1', '2', '3', '4']
for i in xrange(len(test)):
  print test[i]
  i=i+1

在for循环内部是否有一种方法可以操作指针,以便我可以实现一些复杂的逻辑(例如,向后退两步,然后向前走三步)?我知道可能有其他方法来实现我的算法(这也是我目前所做的),但我想知道Python是否提供了这种能力。

4个回答

9
当您尝试操纵索引i时,您正在这样做,但是当for循环进入下一次迭代时,它会将i赋值为xrange(len(test))的下一个值,因此不受您所做的操作的影响。您可以尝试使用while代替:

test = ['1', '2', '3', '4']
i = 0
while i < 4:
    print test[i]
    i += 2

谢谢回复,我接受了最老的那个,因为你们的解决方案很相似。 - Vasilis
是的,当他发布答案时,我正在撰写文字部分。 - Christian Tapia

6

可以和不能。Python循环的意思是迭代预定义的迭代器,因此不允许直接修改其进程。但是你当然可以像PHP一样做到:

test = ['1', '2', '3', '4']
i = 0
while i < len(test):
    print test[i]
    # Do anything with i here, e.g.
    i = i - 2
    # This is part of the loop
    i = i + 1

1

对于复杂的循环逻辑,您可以设置步长以迭代创建或使用的数组,或使用lambda函数。

#create an array
a = [3, 14, 8, 2, 7, 5]

#access every other element

for i in range(0, len(a), 2):
    print a[i]

#access every other element backwards

for i in range(len(a) - 1, 0, -2):
    print a[i]

#access every odd numbered index

g = lambda x: 2*x + 1
for i in range(len(a)):
if g(i) > len(a):
        break
else:
        print a[g(i)]

0

for 的语义是

遍历序列(如字符串、元组或列表)或其他可迭代对象的元素

您可以在这里阅读更多关于for的内容。

因此,如果您想在访问容器时实现一些逻辑,请使用while或其他方法,而不是for


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