代码之家  ›  专栏  ›  技术社区  ›  Christofer Ohlsson

在python(cpython)中进行不可变随机播放的内置方法?[复制品]

  •  1
  • Christofer Ohlsson  · 技术社区  · 6 年前

    这个 random.shuffle() 内置的洗牌功能,适用于多种用途。但是假设我们希望保留原始集合的完整性,并基于原始序列生成随机排列,那么在标准库中是否有一种更好的方法来实现这一点?

    当我看着 CPython's random.py 我看到一个原始评论:

    sequences
        ---------
               pick random element
               pick random sample
               pick weighted random sample
               generate random permutation
    

    尤其是最后一行。然而,我很难看到这个类中的什么方法可以实现这个。

    当然,这不是一个很难解决的问题,即使对于初学的Python程序员也是如此。但是在标准库中有一个标准的方法来完成它是很好的,我相信它一定存在于某个地方。也许在别的地方 random.py ?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Ralf    6 年前

    根据 random.shuffle() 你可以使用 random.sample() :

    要随机播放不可变序列并返回新的随机播放列表,请使用 sample(x, k=len(x)) 而不是 shuffle() .

    同样的事情在 this post

        2
  •  1
  •   djc    6 年前

    这似乎是一个显而易见的解决方案,它不应该做太多的工作:

    def shuffled(gen):
        ls = list(gen)
        random.shuffle(ls)
        return ls
    

    由于从stdlib原语构建非常简单,我不确定将其作为单独的原语包含进来是否有意义。

    推荐文章