8

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

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

4

2 回答 2

12

您可以使用range()withlist()来生成整数列表,然后应用于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).
于 2013-01-20T19:47:24.557 回答
10

如果您希望整个人口在给定范围内,正如@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 中运行
于 2013-01-20T19:58:36.887 回答