如何在Python中列出n个数字并随机选择任意数字?

时间:2011-09-27 10:00:25

标签: python list random

我已经计算了一些东西,它出现在N.

现在我想要一个列表,其中包含0到N个数字。

示例:

N = 5

然后,count_list = [1, 2, 3, 4, 5]

我怎么能这样做?

此外,一旦我创建了列表,我想从该列表中随机选择一个数字并使用该数字。

之后,我想从列表的剩余数字(N-1)中选择另一个数字,然后再使用它。

这样就可以了,列表是空的。

我该怎么做?

8 个答案:

答案 0 :(得分:33)

您可以通过以下方式创建元素的枚举:

mylist = list(xrange(10))

然后您可以使用random.choice功能选择项目:

import random
...
random.choice(mylist)

Asim Ihsan正确地说,我的答案没有解决OP的全部问题。要从列表中删除值,只需调用list.remove()

import random
...
value = random.choice(mylist)
mylist.remove(value)

正如takataka指出的,xrange内置函数在Python 3中被重命名为range

答案 1 :(得分:7)

您可以尝试此代码

import random
N = 5
count_list = range(1,N+1)
random.shuffle(count_list)

while count_list:
    value = count_list.pop()
    # do whatever you want with 'value'

答案 2 :(得分:1)

至于第一部分:

>>> N = 5
>>> count_list = [i+1 for i in xrange(N)]
>>> count_list
[1, 2, 3, 4, 5]
>>>

至于第二个,请阅读 9.6. random — Generate pseudo-random numbers

>>> from random import choice
>>> a = choice(count_list)
>>> a
1
>>> count_list.remove(a)
>>> count_list
[2, 3, 4, 5]

这是一般的想法。

顺便说一句,您可能也感兴趣 在阅读 Random selection of elements in a list, with no repeats (Python recipe)

有一些快速随机选择的实现。

答案 3 :(得分:1)

如果你想挑选一个随机元素,你不需要计算东西。只需使用random.choice()并传递您的iterable:

import random
items = ['foo', 'bar', 'baz']
print random.choice(items)

如果您真的必须计算它们,请使用random.randint(1, count+1)

答案 4 :(得分:1)

您可以使用:

import random
random.choice(range(n))

或:

random.choice(range(1,n+1))

如果您需要1n而不是0

答案 5 :(得分:1)

  

之后,我想从列表的剩余数字(N-1)中选择另一个数字,然后再使用它。

然后你可以说你真的不想创建一个从1到N的数字列表,只是为了选择一个(为什么不直接在该范围内询问一个随机数,而不是明确地创建它以供选择? ),而是洗牌这样的清单。幸运的是,random模块也为您提供了保障:只需使用random.shuffle

当然,如果你有一个巨大的数字列表而你只想画几个,那么使用random.choice绘制每个数字并删除它肯定是有意义的。

但是......你为什么要选择范围内的数字,这与某些项目的数量相对应?你打算用这个号码来选择其中一个项目吗?不要那样做;这会让你的事情变得太复杂。如果您想选择其中一个项目,请直接使用random.choice

答案 6 :(得分:0)

创建列表(已编辑):

count_list = range(1, N+1)

选择随机元素:

import random
random.choice(count_list)

答案 7 :(得分:0)

维护set并删除随机拾取的元素(choice),直到列表为空:

s = set(range(1, 6))
import random

while len(s) > 0:
  s.remove(random.choice(list(s)))
  print(s)

三次跑步给出了三个不同的答案:

>>>
set([1, 3, 4, 5])
set([3, 4, 5])
set([3, 4])
set([4])
set([])
>>>
set([1, 2, 3, 5])
set([2, 3, 5])
set([2, 3])
set([2])
set([])

>>>
set([1, 2, 3, 5])
set([1, 2, 3])
set([1, 2])
set([1])
set([])