是否可以在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。