是否可以在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是否提供了这种能力。
答案 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)