在 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)) .. 似乎不适用于动态生成的列表:( @user1019129random.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 中随机化字符串列表的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章