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

时间:2009-06-20 18:05:45

标签: python string random

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

我看到了几种“蛮力”的方式(使用循环,上帝禁止),其中一种我正在使用。但是,了解Python可能会有一个很酷的单行程来完成工作,对吗?

6 个答案:

答案 0 :(得分:187)

>>> 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 :(得分:13)

看起来这是最简单的方法,如果不是最真实随机的(this question更全面地解释了这些限制):http://docs.python.org/library/random.html#random.shuffle

答案 2 :(得分:4)

给定一个字符串 item ,这是一个单行:

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

答案 3 :(得分:3)

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

答案 4 :(得分: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)

答案 5 :(得分:0)

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

random.shuffle(x := list("abcdefghijklmnopqrstuvwxyz"))
x = "".join(x)