在Python中处理for循环的索引

时间:2013-12-27 04:47:10

标签: python for-loop indexing

是否可以在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循环指针,这样我就可以实现一些复杂的逻辑(例如,返回2步然后转发3)?我知道可能有其他方法来实现我的算法(这就是我现在所做的),但我想知道Python是否提供了这种能力。

4 个答案:

答案 0 :(得分:6)

当您尝试操作索引i时,您正在执行此操作,但当for循环转到下一次迭代时,它会将i分配给{{1}的下一个值所以它不会受到你所做的操纵的影响。

您可能想要尝试xrange(len(test))

while

答案 1 :(得分:4)

是和否。 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

答案 2 :(得分: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)]

答案 3 :(得分:0)

的语义是

  

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

您可以详细了解 here

因此,如果您想在访问容器时实施某些逻辑,则应使用 while 或其他方法,而不是用于