为什么循环中的赋值语句只在python中执行一次

问题描述 投票:1回答:2

我认为这与我的C语言习惯不同。我想每次都执行赋值语句,那么怎么做呢?

输入

a = [0,1,2,3,4,5]
for i in range(6):
    b = a
    print(len(b))
    c = b.pop(i)

产量

6
5
4
3
Exception has occurred: IndexError
pop index out of range

似乎qazxsw poi只执行一次。

我想得到的答案是:

b = a

我不想改变6 6 6 6 6 6 的长度。

python list for-loop pop
2个回答
2
投票

首先,你没有使用b,所以不需要导入它。

其次,你认为“赋值”在Python中并不存在。相反,您将名称numpy绑定到b也绑定的值。实际上,您的代码与此之间没有区别:

a

如果需要副本,则需要显式创建一个副本:

a = [0,1,2,3,4,5]
for i in range(6):
    print(len(a))
    c = a.pop(i)

输出:

a = [0,1,2,3,4,5]
for i in range(6):
    b = a[:]  # or b = a.copy()
    print(len(b))
    c = b.pop(i)

1
投票

6 6 6 6 6 6 a不是不同的对象,它们只是同一个对象的不同名称。当你说b时,你正在修改b.pop(i)a指向的那个对象,所以做b在第一次迭代后没有做任何事情; b=a已经指向与b相同的对象。你想做什么可以通过做a来完成。

© www.soinside.com 2019 - 2024. All rights reserved.