在Python中随机排序字符串列表的最佳方法

85
我会接收一个字符串列表作为输入,需要返回一个随机排序的包含相同字符串的列表。我必须允许重复 - 相同的字符串可能出现一次或多次在输入中,并且必须在输出中出现相同次数。
我看到有几种"暴力"的方法可以实现这个功能(使用循环,可能让代码不够简洁),其中之一是我目前正在使用的方法。但是,因为 Python 语言非常灵活,很可能存在一行代码就能解决问题的酷炫方法,不是吗?

6个回答

217
>>> 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
random.shuffle 是Python中用来打乱列表顺序的函数。在Python 3中,range(5)是一个生成器而不是列表。在Python 2中,range(5)是一个列表,但是打乱操作是就地进行的,所以它会打乱一个临时列表,这个临时列表会立即被丢弃。你可以使用 x = range(5); random.shuffle(x) 来打乱列表并赋值给变量 x,然后使用这个被打乱的列表 x - John Kugelman

13

7
给定一个字符串item,以下是一行代码:
''.join([str(w) for w in random.sample(item, len(item))])

3
你需要将字符串读入数组,然后使用洗牌算法。我推荐使用 Fisher-Yates 洗牌算法。 (了解更多)

1
根据对维基百科文章的一瞥,看起来这正是它正在做的事情。您可以在C:\Python26\Lib\random.py(或其他操作系统的等效位置)中阅读代码,看起来它正在执行此处描述的相同操作:http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modern_method。 - Tyler

1
在Python 3.8中,您可以使用海象运算符将其压缩到几行代码中。首先,您需要从字符串创建一个列表并将其存储到变量中。然后,您可以使用random函数进行洗牌。最后,将列表合并回字符串即可。
random.shuffle(x := list("abcdefghijklmnopqrstuvwxyz"))
x = "".join(x)

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接