gpt4 book ai didi

python - python中list的append函数的使用

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:52 24 4
gpt4 key购买 nike

class Solution:    
# @param num, a list of integer
# @return a list of lists of integers
def permute(self, num):
self.res = [];
self.dfs(num, 0)
return self.res

def dfs(self, num, level):
if level == len(num):
self.res.append(num)
print(num)
return
for i in range(level, len(num)):
num[i], num[level] = num[level], num[i]
self.dfs(num, level+1)
num[i], num[level] = num[level], num[i]

上面的代码用于生成给定一组数字的所有排列。例如,数 = [1, 3]结果将是:[1 3], [3, 1]

但是上面的代码有个bug我没看懂,就是self.res.append(num)。如果我将其更改为 self.res.append(num[:]),则代码是正确的。谁能解释一下为什么?

使用self.res.append(num),结果是:

[1, 3], [1, 3]

使用self.res.append(num[:]),结果是:

[1, 3], [3, 1]

最佳答案

python list 的元素是对其他对象的引用。当您使用 self.res.append(num) 追加时,列表增加 1 个元素,最后一个元素设置为引用 num 指向的对象.

现在在第一种情况下,有 2 个对同一个 list 对象的引用。由于 self.res[0]self.res[1] 指的是同一个对象,因此通过其中一个执行的所有更改也可以通过另一个看到。

在第二种情况下,使用 num[:][:] 运算符创建一个新列表,该列表是原始列表的副本。


对于创建给定元素集合的所有排列的通用算法,请使用 itertools.permutations :

>>> from itertools import permutations
>>> print(list(permutations([1, 3])))
[(1, 3), (3, 1)]

关于python - python中list的append函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com