Лучший способ рандомизировать список строк в Python - PullRequest
72 голосов
/ 20 июня 2009

Я получаю в качестве входных данных список строк, и мне нужно вернуть список с теми же строками, но в случайном порядке. Я должен разрешить дубликаты - одна и та же строка может появляться на входе один или несколько раз и должна появляться на выходе одинаковое количество раз.

Я вижу несколько способов "грубой силы" сделать это (используя петли, не дай бог), один из которых я сейчас использую. Тем не менее, зная Python, вероятно, есть крутая однострочная работа, верно?

Ответы [ 5 ]

188 голосов
/ 20 июня 2009
>>> 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]
13 голосов
/ 20 июня 2009

Похоже, это самый простой способ, если не самый по-настоящему случайный ( этот вопрос более полно объясняет ограничения): http://docs.python.org/library/random.html#random.shuffle

4 голосов
/ 25 августа 2010

С учетом строки item , вот одна строка:

''.join([str(w) for w in random.sample(item, len(item))])
3 голосов
/ 20 июня 2009

Вам нужно будет прочитать строки в массив, а затем использовать алгоритм перемешивания. Я рекомендую Fisher-Yates shuffle

0 голосов
/ 26 сентября 2018
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)
...