2017-12-11 31 views
0

저는 파이썬을 사용하고 있고 그 파일을 txt 파일에 쓴 후 복사 한 목록을 뒤섞고 싶습니다 (아래 코드 참조).원본 목록을 섞지 않고 복사 된 목록을 섞는 방법?

왜 셔플 기능이 원래 목록을 무작위로 지정합니까? 나는 함수 호출을 위해서만 복사본을 사용한다.

아이디어가 있으십니까? 고맙습니다 !

from random import shuffle 

def shuffleList2txt(myList): 
    shuffle(myList) 

    f = open('randList.txt','w') 
    f.write(str(liste)) 
    f.close() 

    return(myList) 


liste = [1,2,3,4,5,6,7,8,9,10] 
copy = liste 
shuffledList = shuffleList2txt(copy) 

liste와 shuffledList는 같습니다. 왜? liste는 원본이어야하고 shuffledList는 shuffled 목록이어야합니다 .... :)

+0

이전에 [this] (https://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference)를 읽었는지 확실하지 않지만, 알고있는 것이 좋습니다. 당신의 경우. – stucash

+1

당신과 당신의 파트너는 개가 있습니다. 당신은 그녀의 "조"라고 부르고 당신의 파트너는 그녀의 "Krok"라고 부릅니다. 이제 당신의 파트너는 Krok의 머리카락을 다듬기 위해 미용 서비스를 부릅니다. 당신이 집에있을 때 Jo는 여전히 긴 머리를 가졌습니까? 목록 개체는 두 가지 다른 방식으로 명명되었지만 여전히 오래된 강아지입니다! [이 질문] (https://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list?s=1|749.8298) (또는 이에 대한 수십 가지 답변 중 하나를 참조하십시오. 주제)이 문제를 극복하기 위해. – gboffi

+0

하하 ...이 아름다운 설명에 대해 감사합니다 gboffi :) – Chris72H

답변

4

random.shuffle이 제자리에서 작동합니다. 물론 당신은 셔플 이전 목록의 복사본을 만들 수 있지만, 당신은 샘플을 복용 ... 전체 목록으로하여 random.sample 더 나을 것 :

>>> l = [1,2,3,4] 
>>> random.sample(l,len(l)) 
[3, 1, 2, 4] 
>>> l 
[1, 2, 3, 4] 

그래서 할당 random.sample의 결과가 있습니다 당신은 원래 목록을 변경하지 않고 새로운, 셔플 목록.

+0

잘못된 질문에 대한 올바른 답변 축하합니다! – gboffi

+0

장 프랑수아 감사합니다! 당신은 좋은 해결책을 보여 줬어! 또한 다른 주제를 확인하고 목록 복제 문제를 이해했습니다. – Chris72H

+0

네, 한 줄로 할 수있을 때 처음부터 목록을 복사하기 때문에 _ 내부 _ 셔플 링을 적용하는 것이 서투른 것처럼 보이기 때문에 중복인지 확신 할 수 없습니다. –