因此,每次使用python时,我都必须以随机顺序打印列表。
我有这个:
import random
print("Below is a random implementation of some words:")
list = ["programming", "technology", "numeracy", "web dev"]
random.shuffle(list) #<---- could use a for loop
print(*list)
input(" ")
input("\n\nPress the enter key to exit")
这很好。但是我被要求尝试用for循环来做这个但我甚至无法考虑如何做到这一点?有什么想法吗?
答案 0 :(得分:0)
一个简单的算法就是制作一个for循环,一遍又一遍地切换列表中的2个随机元素。
这不是非常有效(你需要大量的交换机),它有偏见。这意味着,某些排列比其他排列更容易出现。
一个很好的算法是 Fisher-Yates shuffle 。看一下wiki页面:Link Fischer-Yates shuffle几乎完全相同,它用for循环切换随机元素,但它有一种方式,它具有线性运行时和保证是无偏的。
答案 1 :(得分:0)
在Python(link to source)中实现shuffle
的方式:
def shuffle(self, x, random=None):
"""Shuffle list x in place, and return None.
Optional argument random is a 0-argument function returning a
random float in [0.0, 1.0); if it is the default None, the
standard random.random will be used.
"""
if random is None:
randbelow = self._randbelow
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = randbelow(i+1)
x[i], x[j] = x[j], x[i]
else:
_int = int
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = _int(random() * (i+1))
x[i], x[j] = x[j], x[i]