당신은 하나의리스트에 대한 참조 전체 시간에 최선을 다하고 있기 때문에 첫 번째 후 목록에 항상 그래서이 작동하지 않습니다 추가 할 시간.
고려 :
perms = []
items = [1, 2, 3]
random.shuffle(mylist) # perhaps items is now [2, 1, 3]
perms.append(items) # perms is now [[2, 1, 3]]
random.shuffle(mylist) # perhaps items is now [1, 3, 2]
perms.append(items) # now what is perms?
대답은, 그 정도로 perms
는 단일리스트 개의 참조가 [1, 3, 2], [1, 3, 2].
코드에서 items
과 perms[0]
은 같은 개체이며 동일한 값입니다. 따라서 items
이 perms
에 있는지 묻는다면 대답은 항상 예입니다. 네가 거기에 넣었으니!
해결책은 간단합니다. 목록 사본을 추가하십시오.
perms.append(items[:])
그건 그렇고, 당신은 아마 set
오히려 순열을 저장하기위한 list
(A)보다를 사용해야합니다. set
의 회원을 확인하는 것이 훨씬 빠르며 중복 추가 시도는 무시됩니다. 단 한 가지 단점은 목록이 변경 가능하고 따라서 해쉬 할 수 없으므로 목록을 set
에 넣을 수 없다는 것입니다. 다행히도, 불변의 해시 가능 튜플로 변환 할 수 있습니다. 그렇다면 :
items = range(0, max) # Python 3: items = list(range(0, max))
perms = set()
nump = 10
while len(perms) < nump:
random.shuffle(items)
perms.add(tuple(items))
목록에 집합을 추가 할 수 없습니다. 집합에 목록을 추가 할 수 없습니다 (변경 가능). 'items [:]'대신'tuple (items)'을 사용하십시오. –
감사합니다. 이것은 나를 위해 작동합니다. –
롭 : 그래, 나는 그것을 잊어 버린 것을 믿을 수 없다. 결정된! – kindall