【问题标题】:Shuffle a list within a specific range python在特定范围python内随机播放列表
【发布时间】:2013-01-20 19:45:48
【问题描述】:

我对 Python 很陌生,所以请耐心等待。我想运行一个程序,它将在特定范围内打乱一串整数,但不必输入该范围内的每个整数。即,我想在不输入 (1, 2, 3...100) 的情况下随机化整数列表 b/w 1-100。

是的,我查看了类似问题的其他答案,但都要求特定范围内的一个整数,或者没有针对 Python 的答案,或者要求更复杂的东西。谢谢

【问题讨论】:

    标签: python list range shuffle


    【解决方案1】:

    您可以使用range()list() 生成整数列表,然后在该列表上应用random.shuffle()

    >>> lst = list(range(1,11))
    >>> lst
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> random.shuffle(lst)
    >>> lst
    [4, 5, 3, 9, 2, 10, 7, 1, 6, 8]
    

    关于内置模块中 range 类的帮助:

    class range(object)
     |  range(stop) -> range object
     |  range(start, stop[, step]) -> range object
     |
     |  Return an object that produces a sequence of integers from start (inclusive)
     |  to stop (exclusive) by step.  range(i, j) produces i, i+1, i+2, ..., j-1.
     |  start defaults to 0, and stop is omitted!  range(4) produces 0, 1, 2, 3.
     |  These are exactly the valid indices for a list of 4 elements.
     |  When step is given, it specifies the increment (or decrement).
    

    【讨论】:

    • 如果我已经有一个列表,但只想洗牌一个子列表怎么办?我认为这是最初的问题。
    • @user2061057 类似:sublist = lis[5:10]; random.shuffle(sublist); lis[5:10] = sublist
    • 在 Python 3.9 中,此答案在调用 random.shuffle(lis) 时会生成 TypeError。使用 lis = list(range(1,11)) 代替 lis = range(1,11)。
    【解决方案2】:

    如果您希望整个人口在给定范围内,正如@Ashwini 建议的那样,您可以使用random.shuffle

    如果您对部分人群感兴趣,可以期待使用random.sample

    >>> random.sample(range(1,10),5)
    [3, 5, 2, 6, 7]
    

    你也可以用它来模拟random.shuffle

    >>> random.sample(range(1,10),(10 - 1))
    [4, 5, 9, 3, 2, 8, 6, 1, 7]
    

    注意,使用 random.sample 优于 random.shuffle 的优点是,它可以在迭代器上工作,所以在

    • Python 3.X 你不需要;不需要将range() 转换为列表
    • 在 Python 2,X 中,您可以使用 xrange
    • 相同的代码可以在 Python 2.X 和 3.X 中运行

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 1970-01-01
      • 2021-11-04
      • 2023-01-23
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      相关资源
      最近更新 更多