播放器中的shuffle是啥意思,和random有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了播放器中的shuffle是啥意思,和random有啥区别相关的知识,希望对你有一定的参考价值。

如题。请尽量说的详细些。

参考技术A 其实,shuffle好random都是随机播放。如果仔细区分的话还是有差异的,
一般来说:对一个播放列表进行shuffle/random play,在还没有全部播放一遍的情况下,
random play会出现重复播放某些歌曲的情况。
但严格的shuffle play,总能保证不重复,除非当前的播放列表里的歌曲播放一遍了。本回答被提问者采纳

选择与随机播放,Python

我想知道哪个shuffle()choice()效率更高。例如,我有一个N元素列表long_list并需要列表中的随机项,是否更快做:

shuffle(long_list)
return long_list[0]

要么

return choice(long_list)
答案

random.choice()总是会更快,因为它在恒定时间内查找O(1)

random.shuffle()需要迭代整个序列来执行shuffle,这将是O(n),然后你的查找是恒定时间O(1)

The source code is available to read here

另一答案

使用random.choice肯定会更快。

你可以通过查看at the code轻松搞清楚这一点。 (cpython中的random模块主要在Python中实现,只有低级随机数生成在C中。)以下是相关部分,它们恰好相邻:

def choice(self, seq):
    """Choose a random element from a non-empty sequence."""
    try:
        i = self._randbelow(len(seq))
    except ValueError:
        raise IndexError('Cannot choose from an empty sequence') from None
    return seq[i]

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]

choice方法只生成一个随机数,并使用它来索引它给出的序列。另一方面,shuffle方法在序列的长度上循环,并在其前进时交换元素。所以choice将花费O(1)时间,而shuffle花费O(N)时间。

在大多数情况下,如果您只需要一个值,则需要使用random.choice。如果您想要几个非重复选择,请使用random.sample。只有当你要使用所有的值时才使用random.shuffle。请注意,即使您确实希望选择多个项目,如果您希望可以多次选择同一项目,仍应使用random.choice。采样和随机播放将永远不会重复项目(除非项目在输入列表中重复)。

以上是关于播放器中的shuffle是啥意思,和random有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

shuffle是啥意思车上的?

算法—— 随机音乐的播放算法

选择与随机播放,Python

python的rand是啥意思?

C++ STL应用与实现64: 如何使用shuffle和random_shuffle : 洗牌 (since C++11)

如何创建一个单词的字谜?