Python에서 문자열 목록을 무작위 화하는 가장 좋은 방법


79

입력으로 문자열 목록을 수신하고 동일한 문자열이 있지만 무작위 순서로 목록을 반환해야합니다. 중복을 허용해야합니다. 동일한 문자열이 입력에 한 번 이상 나타날 수 있으며 출력에 동일한 횟수가 나타나야합니다.

나는 여러 가지 "무력한"방법 (루프 사용, 신은 금지)을 봅니다. 그중 하나는 현재 사용하고 있습니다. 그러나 Python을 알면 아마도 멋진 한 줄짜리가있을 것입니다.


답변:


204
>>> import random
>>> x = [1, 2, 3, 4, 3, 4]
>>> random.shuffle(x)
>>> x
[4, 4, 3, 1, 2, 3]
>>> random.shuffle(x)
>>> x
[3, 4, 2, 1, 3, 4]

1
random.shuffle (range (5)) .. 즉석 생성 목록에서 작동하지 않는 것 같습니다. :(
sten

7
@ user1019129 random.shuffle는 목록을 제자리에서 섞 습니다. Python 3에서는 range(5)목록이 아니라 생성기입니다. Python 2에서는 range(5)은 목록이지만 셔플이 제자리에 있으므로 즉시 버려지는 임시 목록을 셔플합니다. 당신은 할 수 x = range(5); random.shuffle(x)있고 사용할 수 있습니다 x.
John Kugelman 2014


7

item 문자열이 주어지면 다음은 한 줄짜리입니다.

''.join([str(w) for w in random.sample(item, len(item))])

3

문자열을 배열로 읽은 다음 셔플 링 알고리즘을 사용해야합니다. Fisher-Yates 셔플을 권장합니다.


1
Wikipedia 기사를 한눈에 볼 때 어쨌든 그것이 무엇을하고 있는지 다소간 것처럼 보입니다. C : \ Python26 \ Lib \ random.py (또는 다른 OS의 경우에 해당)에서 코드를 읽을 수 있으며 여기에 설명 된 것과 동일한 작업을 수행하는 것처럼 보입니다. en.wikipedia.org/wiki/…
MatrixFrog

0
import random

b = []
a = int(input(print("How many items you want to shuffle? ")))
for i in range(0, a):
    n = input('Please enter a item: ')
    b.append(n)

random.shuffle(b)

print(b)

0

파이썬 3.8에서는 해마를 사용하여 몇 줄로 밀어 넣을 수 있습니다. 먼저 문자열에서 목록을 만들어 변수에 저장해야합니다. 그런 다음 무작위를 사용하여 섞을 수 있습니다. 그런 다음 목록을 다시 문자열로 결합하십시오.

random.shuffle(x := list("abcdefghijklmnopqrstuvwxyz"))
x = "".join(x)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.