Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列出pop和insert操作意外结果_Python - Fatal编程技术网

Python 列出pop和insert操作意外结果

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

与下面的代码不同,此代码输出是意外的[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 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