Python中使用for循环的随机列表?

时间:2015-10-31 18:50:17

标签: python

因此,每次使用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循环来做这个但我甚至无法考虑如何做到这一点?有什么想法吗?

2 个答案:

答案 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]