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

Posted

技术标签:

【中文标题】在 Python 中随机化字符串列表的最佳方法【英文标题】:Best way to randomize a list of strings in Python 【发布时间】:2010-11-04 13:28:47 【问题描述】:

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

我看到了几种“蛮力”方法(使用循环,上帝保佑),我目前正在使用其中一种。但是,知道 Python 可能有一个很酷的单行代码可以完成工作,对吧?

【问题讨论】:

Shuffling a list of objects in python的可能重复 【参考方案1】:

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

【讨论】:

【参考方案2】:
>>> 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]

【讨论】:

random.shuffle(range(5)) .. 似乎不适用于动态生成的列表:( @user1019129 random.shuffle 随机播放列表。在 Python 3 中,range(5) 是一个生成器,而不是一个列表。在 Python 2 中,range(5) 是一个列表,但是洗牌已经到位,所以它会洗牌一个临时列表,该列表会立即被丢弃。您可以先使用x = range(5); random.shuffle(x),然后使用x【参考方案3】:

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

【讨论】:

基于对***文章的一瞥,它看起来或多或少是它正在做的事情。您可以阅读 C:\Python26\Lib\random.py 中的代码(或其他操作系统的等效代码),它看起来就像这里描述的一样:en.wikipedia.org/wiki/…【参考方案4】:

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

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

【讨论】:

【参考方案5】:
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)

【讨论】:

【参考方案6】:

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

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

【讨论】:

以上是关于在 Python 中随机化字符串列表的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在Python中随机化一个列表[重复]

在 Python 中生成随机文件名的最佳方法

将随机数批量添加到文件名的最佳方法?

Python:列表和随机。如何在 0 和 [列表中的字符串数] 之间选择随机数? [复制]

从复选框中选择随机答案的最佳方法[重复]

python_生成随机数与列表排序