Python 列出pop和insert操作意外结果
与下面的代码不同,此代码输出是意外的[2,2,3]Python 列出pop和insert操作意外结果,python,Python,与下面的代码不同,此代码输出是意外的[2,2,3] x=[1,2,3] for i in range(1): for j in range(1): x.pop(0) print(x) x.insert(j,x[0]) print(x) 两个代码1都将x[0]打印为2,但相同的pop值正确打印为1。为什么会这样 这是代码3 x=[1,2,3] for i in range(1): for j in
x=[1,2,3]
for i in range(1):
for j in range(1):
x.pop(0)
print(x)
x.insert(j,x[0])
print(x)
两个代码1都将x[0]打印为2,但相同的pop值正确打印为1。为什么会这样
这是代码3
x=[1,2,3]
for i in range(1):
for j in range(1):
c=x.pop(0)
print(x)
x.insert(j,c)
print(x)
我想用这个代码来排列数字。我解释一下你的3个代码是什么
x=[1,2,3]
for i in range(len(x)):
for j in range(len(x)):
#wanted to use 123 again and again but same address issue
z=x
c=z.pop(i)
z.insert(j,x[i])
#out of range issue
print(z)
但是您希望代码做什么?
z=x
创建另一个对x
的引用,而不是具有相同元素的新列表。因此z.pop()
会发生变异x
。也许您想要z=x[:]
,但您的代码太晦涩了,很难知道这是否能解决问题。滚动您自己的排列算法是一种很好的学习体验,但如果您只想出于其他目的对列表进行排列,请使用itertools.permutations()
参见我认为会生成代码1[1,2,3],那么为什么代码1和代码2输出之间存在差异呢。
x=[1,2,3]
for i in range(1):
for j in range(1):
x.pop(0) # delete x[0], now x[0] is x[1] then 2
print(x)
x.insert(j,x[0]) # insert x[0] which was x[1] then 2
print(x)
x=[1,2,3]
for i in range(1):
for j in range(1):
c=x.pop(0) # delete x[0] but save it in c before remove
print(x)
x.insert(j,c) # insert c, the backup of x[0]
print(x)
x=[1,2,3]
for i in range(len(x)):
for j in range(len(x)):
z=x
c=z.pop(i)
z.insert(j,x[i]) # when j or i == last iteration, it crash because you remove it with pop