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


78

我收到一个字符串列表作为输入,并且需要返回具有这些相同字符串但随机顺序的列表。我必须允许重复-同一字符串在输入中可能出现一次或多次,并且在输出中必须出现相同的次数。

我看到了几种“强力”方法(使用循环,禁止使用),我目前正在使用其中一种。但是,知道Python可能会完成一项工作,对吧?


Answers:


201
>>> 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
@ user1019129random.shuffle将列表拖曳到位。在Python 3中,range(5)是生成器,而不是列表。在Python 2中,range(5)列表是一个列表,但是改组已经到位,因此它改组了一个临时列表,该列表会立即被丢弃。您可以做x = range(5); random.shuffle(x)然后使用x
约翰·库格曼


7

给定一个字符串项目,这是一个单行代码:

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

3

您必须将字符串读入数组,然后使用改组算法。我推荐Fisher-Yates洗牌


1
乍一看Wikipedia文章,无论如何它看起来或多或少都在做。您可以在C:\ Python26 \ Lib \ random.py(或其他操作系统的等效文件)中阅读代码,看起来它正在执行此处所述的相同操作: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

在python 3.8中,您可以使用海象帮助将其填入几行。首先,您必须从字符串创建一个列表,并将其存储到变量中。然后,您可以使用随机将其随机播放。然后只需将列表重新加入字符串即可。

random.shuffle(x := list("abcdefghijklmnopqrstuvwxyz"))
x = "".join(x)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.