我已经计算了一些东西,它出现在N.
现在我想要一个列表,其中包含0到N个数字。
示例:
N = 5
然后,count_list = [1, 2, 3, 4, 5]
我怎么能这样做?
此外,一旦我创建了列表,我想从该列表中随机选择一个数字并使用该数字。
之后,我想从列表的剩余数字(N-1)中选择另一个数字,然后再使用它。
这样就可以了,列表是空的。
我该怎么做?
答案 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))
如果您需要1
到n
而不是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([])