왜 무작위로.셔플 리턴 없음?
이유는random.shuffle
돌아오는None
파이썬에서?
>>> x = ['foo','bar','black','sheep']
>>> from random import shuffle
>>> print shuffle(x)
None
어떻게 하면 대신 셔플된 값을 얻을 수 있습니까?None
?
random.shuffle()
를 변경합니다.x
제자리에 나열합니다.
인플레이스 구조를 변경하는 Python API 메서드는 일반적으로 반환됩니다.None
수정된 데이터 구조가 아닙니다.
>>> x = ['foo', 'bar', 'black', 'sheep']
>>> random.shuffle(x)
>>> x
['black', 'bar', 'sheep', 'foo']
기존 목록을 순서대로 유지하는 기존 목록을 기반으로 랜덤하게 섞이는 새 목록을 생성하려면 입력의 전체 길이와 함께 사용할 수 있습니다.
random.sample(x, len(x))
정렬 키에 와 함께 사용할 수도 있습니다.
shuffled = sorted(x, key=lambda k: random.random())
그러나 이것은 정렬(O(N 로그 N) 연산을 호출하는 반면, 입력 길이로 샘플링하는 것은 O(N) 연산만 수행합니다(와 동일한 프로세스).random.shuffle()
를 사용하여 축소 풀에서 임의의 값을 스왑합니다.
데모:
>>> import random
>>> x = ['foo', 'bar', 'black', 'sheep']
>>> random.sample(x, len(x))
['bar', 'sheep', 'black', 'foo']
>>> sorted(x, key=lambda k: random.random())
['sheep', 'foo', 'black', 'bar']
>>> x
['foo', 'bar', 'black', 'sheep']
이 방법도 효과가 있습니다.
import random
shuffled = random.sample(original, len(original))
왜, 정말?
효율성
shuffle
목록을 수정합니다.원본 목록이 더 이상 필요하지 않은 경우 큰 목록을 복사하는 것은 순수한 오버헤드이기 때문에 이 방법이 좋습니다.
피톤체
"명시적인 것이 암시적인 것보다 낫다"는 피톤체 스타일의 원칙에 따르면, 목록을 반환하는 것은 나쁜 생각일 것입니다. 왜냐하면 사람들은 그것이 사실은 그렇지 않지만 새로운 것이라고 생각할 수 있기 때문입니다.
하지만 이런 건 싫어요!
만약 당신이 새로운 목록이 필요하다면, 당신은 다음과 같은 것을 써야 할 것입니다.
new_x = list(x) # make a copy
random.shuffle(new_x)
아주 명백한 것입니다.만약 당신이 이 관용구가 자주 필요하다면, 그것을 함수로 포장하세요.shuffled
(참조)sorted
) 되돌아오는 것new_x
.
문서에 따르면:
순서 x를 제자리에 섞습니다.선택적 인수 랜덤은 [0.0, 1.0]에서 랜덤 부동 소수점을 반환하는 0-인수 함수이며, 기본적으로 이 함수는 랜덤()입니다.
>>> x = ['foo','bar','black','sheep']
>>> from random import shuffle
>>> shuffle(x)
>>> x
['bar', 'black', 'sheep', 'foo']
저는 이런 컨셉으로 아하 순간을 보냈습니다.
from random import shuffle
x = ['foo','black','sheep'] #original list
y = list(x) # an independent copy of the original
for i in range(5):
print shuffle(y) # shuffles the original "in place" prints "None" return
print x,y #prints original, and shuffled independent copy
>>>
None
['foo', 'black', 'sheep'] ['foo', 'black', 'sheep']
None
['foo', 'black', 'sheep'] ['black', 'foo', 'sheep']
None
['foo', 'black', 'sheep'] ['sheep', 'black', 'foo']
None
['foo', 'black', 'sheep'] ['black', 'foo', 'sheep']
None
['foo', 'black', 'sheep'] ['sheep', 'black', 'foo']
언급URL : https://stackoverflow.com/questions/17649875/why-does-random-shuffle-return-none
'programing' 카테고리의 다른 글
npm 설치와 npm 실행 빌드의 차이점은 무엇입니까? (0) | 2023.05.17 |
---|---|
Postgre가 무슨 뜻입니까?SQL 프로세스가 "거래 중 유휴" 상태입니까? (0) | 2023.05.17 |
문자열이 유효한 HTTP URL인지 확인하는 방법은 무엇입니까? (0) | 2023.05.17 |
'ld: 주의: 옵션에 대한 디렉터리를 찾을 수 없습니다.' (0) | 2023.05.17 |
Python에서 NOT, AND 또는 OR에 대한 논리 연산자(작업 순서)의 우선 순위 (0) | 2023.05.17 |