嗨:我正在尝试编写 python 代码来生成排列:要获得 perm(n)
,我会将 n
插入到 的位置重复
到 perm(n-1) n
次的结果为 0n-1
。
例如,要获得perm(2)
,我会这样做:
重复
[1]
2次,得到L1 = [[1], [1]]
对于
L1
中的每个列表,在0和1的位置插入2,得到[[1,2], [2,1]]
.
然后我就得到了答案。
但我有疑问:
- 当我重复
[1]
n=2
次时,如果我使用[1] * 2
我将得到浅拷贝。然后当我改变一个时,其他的也会改变。有没有办法获得与use [1] * 2
相同的结果,但不是浅复制? - 最好的方法是什么?
以下是我的代码,但它不起作用:
def perm(n):
res = []
if n == 1:
res = [1]
else:
s = [perm(n - 1) for i in range(n)]
s2 = [[item] for sublist in s for item in sublist]
for i in range(n):
for j in range(len(perm(n - 1))):
res.append(s2[i * len(perm(n - 1)) + j].insert(i, n))
return res
最佳答案
[[1] for i in xrange(2)]
这会起作用。创建新列表,而不仅仅是添加对现有列表的引用。
关于python - 如何编写代码来生成从 1 到 N 的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27453023/