안녕 : 나는 순열을 생성하기 위해 파이썬 코드를 작성하는 것을 시도하고있다 : perm(n)
을 얻기 위해, 나는 반복의 결과에 n-1
에 0
의 위치에 n
를 삽입합니다 perm(n-1) n
번. ,N 1에서 순열을 생성하는 코드를 작성하는 방법
반복
[1]
2 번,L1
의 각 목록L1 = [[1], [1]]
를 얻기 위해 0과 1의 위치에 2를 삽입 :
예를 들어,
perm(2)
을 얻기 위해, 내가 할 것[[1,2], [2,1]]
이됩니다.
그럼 대답을 얻습니다.
는 그러나 나는 질문이 :
- 내가
use [1] * 2
나는 얕은 사본을 얻을 것이다 만약 내가는[1]
n=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
고맙습니다. 내부 코드를 사용하는 것보다는 직접 코드를 작성하는 연습을하고 있습니다. – pinseng