在 Python 中操作 for 循环的索引



是否可以在Python for loop中操作索引指针?

例如,在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 是否提供这种能力。

当您尝试操作索引时,i您正在这样做,但是当for循环进入下一次迭代时,它会分配i下一个值xrange(len(test)),因此它不会受到您所做的操作的影响。

您可能想尝试while

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

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

对于复杂的循环逻辑,您可以设置步长以迭代您创建的数组或使用 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)]

for 的语义是

迭代

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

您可以在此处阅读更多相关信息

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

最新更新