python3 for 循环的索引表现异常
Index of a python3 for loop is behaving unusually
我正在尝试执行以下 Python 代码:
arr = [3, 4, 1, 6, 2]
n = len(arr)
res = [1] * n
stack = [-1]
#left
for i in range(n):
print(i)
while len(stack) > 1 and arr[stack[-1]] < arr[i]:
stack.pop()
res[i] += i - stack[-1] - 1
stack.append(i)
虽然我没有在代码中更改 i
的值,但它打印如下:
0
1
0
2
3
2
1
4
知道为什么会这样吗? Python 3.6.9 是编译器。
编辑:添加截图作为参考。
我复制并粘贴了你的代码,它在 3.9 和 3.6 online editor 上对我来说都运行良好,但不确定你为什么会遇到问题。
我对两者的输出是
0
1
2
3
4
你的代码没问题。
我用 3.6.9
版本检查
我猜你是 运行 这种互动方式。您看到的是 stack.pop()
的 return 值与显式 print()
语句交错。
如果您分配(并忽略)pop 的 return 值,您将得到您期望的输出。
我正在尝试执行以下 Python 代码:
arr = [3, 4, 1, 6, 2]
n = len(arr)
res = [1] * n
stack = [-1]
#left
for i in range(n):
print(i)
while len(stack) > 1 and arr[stack[-1]] < arr[i]:
stack.pop()
res[i] += i - stack[-1] - 1
stack.append(i)
虽然我没有在代码中更改 i
的值,但它打印如下:
0
1
0
2
3
2
1
4
知道为什么会这样吗? Python 3.6.9 是编译器。
编辑:添加截图作为参考。
我复制并粘贴了你的代码,它在 3.9 和 3.6 online editor 上对我来说都运行良好,但不确定你为什么会遇到问题。
我对两者的输出是
0
1
2
3
4
你的代码没问题。 我用 3.6.9
版本检查我猜你是 运行 这种互动方式。您看到的是 stack.pop()
的 return 值与显式 print()
语句交错。
如果您分配(并忽略)pop 的 return 值,您将得到您期望的输出。