목록 이해에서 random.shuffle과 같은 반환 값이없는 메서드를 사용하는 방법이 있습니까? 목록의 각 요소에 반환 값이없는 메서드 적용
>>> import pprint
>>> import random
>>>
>>> L = [ random.shuffle(range(5)) for x in range(5)]
>>>
>>> print L
[None, None, None, None, None]
이
내 목록의 각 항목에 random.shuffle 방법을 적용 for 루프 :>>> L = [ range(5) for x in range(5) ]
>>> pprint.pprint(L)
[[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]]
>>> for element in L:
... random.shuffle(element)
...
>>> pprint.pprint(L)
[[2, 0, 3, 1, 4],
[2, 0, 1, 4, 3],
[4, 1, 3, 0, 2],
[1, 2, 4, 3, 0],
[1, 3, 0, 2, 4]]
나는 부작용으로 원래 목록을 섞어하지만를 반환 맵을 사용할 수 있습니다 None
>>> L = [ range(5) for x in range(5) ]
>>> pprint.pprint(L)
[[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]]
>>> map(random.shuffle, L)
[None, None, None, None, None]
>>> pprint.pprint(L)
[[3, 0, 4, 1, 2],
[2, 3, 0, 1, 4],
[2, 3, 1, 4, 0],
[4, 2, 0, 3, 1],
[1, 3, 0, 2, 4]]
의 목록 셔플과 지능형리스트를 사용처럼 :
012,392을스택 오버플로에 대한 많은 질문과 답변은 이미 map이나 lc를 부작용으로 사용하는 것이 좋지 않음을 지적합니다. 목록 이해에서 반환 값이없는 메서드를 사용하는 올바른 방법이 있는지 궁금합니다.
은 비 반환 방법을 수있는 유일한 방법을 포장하는 방법을 작성하지 :>>> def shuffled(L):
... ret_val = L[:]
... random.shuffle(ret_val)
... return ret_val
...
>>> L = [ shuffled(range(5)) for x in range(5)]
>>> pprint.pprint(L)
[[2, 1, 0, 4, 3],
[4, 0, 3, 1, 2],
[4, 2, 3, 0, 1],
[1, 0, 4, 2, 3],
[2, 4, 3, 0, 1]]
>>>
:
[편집]
OTOH 당신이 사용할 수
random.sample()
:하지만보다 간결 뭔가를 가고 싶어 목록 이해력! – sjr관련 : http : // stackoverflow.질문과 대답 5753597/피츠 닉 - 사용하기 -리스트 - 이해를위한 - 단지 - 부작용을 위해서 – delnan