파이썬 행렬 랜덤 섞기 질문입니다.
조회수 1627회
import random
A = [[0, 1, 2, 3, 4, 5],
[1, 0, 3, 4, 5, 6],
[2, 3, 0, 5, 6, 7],
[3, 4, 5, 0, 7, 8],
[4, 5, 6, 7, 0, 9],
[5, 6, 7, 8, 9, 0]]
new_order = random.shuffle(A)
A[:] = [A[i] for i in new_order]
for row in A:
row[:] = [row[i] for i in new_order]
print row
new_order를 저렇게 shuffle을 이용해서 무작위로 섞이게 만들고 싶은데 "TypeError: 'NoneType' object is not iterable"이렇게 에러가 발생됩니다. 어떻게 해야할까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
import random A = [[0, 1, 2, 3, 4, 5], [1, 0, 3, 4, 5, 6], [2, 3, 0, 5, 6, 7], [3, 4, 5, 0, 7, 8], [4, 5, 6, 7, 0, 9], [5, 6, 7, 8, 9, 0]] map(random.shuffle, A) # python 3 :list(map(random.shuffle, A)) print A # python 3: print(A) [[1, 2, 5, 4, 0, 3], [6, 3, 5, 1, 0, 4], [2, 3, 0, 7, 5, 6], [0, 4, 7, 3, 5, 8], [5, 6, 4, 0, 7, 9], [0, 5, 6, 8, 7, 9]]
import random from itertools import chain A = [[0, 1, 2, 3, 4, 5], [1, 0, 3, 4, 5, 6], [2, 3, 0, 5, 6, 7], [3, 4, 5, 0, 7, 8], [4, 5, 6, 7, 0, 9], [5, 6, 7, 8, 9, 0]] flattenA = list(chain(*A)) random.shuffle(flattenA) print flattenA # python 3: print(flattenA) [6, 0, 0, 5, 5, 5, 9, 0, 4, 4, 8, 8, 3, 2, 6, 4, 9, 3, 5, 0, 4, 5, 2, 3, 1, 7, 3, 7, 1, 6, 0, 5, 0, 7, 7, 6]
- 감사합니다. 질문에는 안적었지만 대각선은 0을 유지해야하는데 이럴경우 각행을 랜덤으로 돌려야할까요? 알 수 없는 사용자 2018.9.12 11:48
- 0은 작업 리스트에서 빼고 셔플뒤에 0을 삽입하면 됩니다. 즉 0, 7, 14, 21, 28, 35 에 0을 삽입해주면 됩니다. 정영훈 2018.9.12 12:24
-
0은 작업 리스트에서 빼고 셔플뒤에 0을 삽입하면 됩니다. 즉 0, 7, 14, 21, 28, 35 에 0을 삽입해주면 됩니다.
아래와 같이 하면 됩니다.
import random from itertools import chain A = [[1, 2, 3, 4, 5], [1, 3, 4, 5, 6], [2, 3, 5, 6, 7], [3, 4, 5, 7, 8], [4, 5, 6, 7, 9], [5, 6, 7, 8, 9]] flattenA = list(chain(*A)) random.shuffle(flattenA) for i in (0, 7, 14, 21, 28, 35): flattenA.insert(i, 0) print flattenA # python 3: print(flattenA)
댓글 입력