从循环中附加临时列表的结果是相同lis的多个副本

2024-09-30 06:34:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在试着练习做一个方法

s = '132'
lis = list(s)
result = []
lisc = lis[:]

for item in lis:
    for i in range(1,len(lis)):

        lisc.remove(item)
        lisc.insert(i,item)
        print("lis : ", lisc)
        result.append(lisc)

print(result)

结果是:

lis :  ['3', '1', '2']
lis :  ['3', '2', '1']
lis :  ['2', '3', '1']
lis :  ['2', '1', '3']
lis :  ['1', '2', '3']
lis :  ['1', '3', '2']
[['1', '3', '2'], ['1', '3', '2'], ['1', '3', '2'], ['1', '3', '2'], ['1', '3', '2'], ['1', '3', '2']]

我不明白为什么结果会在循环中附加原来的lisc而不是修改后的lisc

我尝试了result.append(lisc[:]),它可以工作

for item in lis:
    for i in range(1,len(lis)):

        lisc.remove(item)
        lisc.insert(i,item)
        print("lis : ", lisc)
        result.append(lisc[:])

print(result)

有人能回答我的问题吗

先谢谢你


Tags: 方法inforlenrangeresultitemremove
1条回答
网友
1楼 · 发布于 2024-09-30 06:34:26

在代码的第一个版本中,您附加了在每次迭代中更新的相同列表。最后,您附加的所有lisc都将是对同一列表的引用

在第二个版本中,您将附加修改列表的新副本。这些拷贝都是不同的对象

相关问题 更多 >

    热门问题