我已经对某个东西进行了计数,并且结果是N。
现在我想要一个列表,其中包含1到N的数字。
例:
N = 5
那么,count_list = [1,2,3,4,5]
另外,一旦我创建了这个列表,我想随机从列表中选择一个数字并使用该数字。
之后,我想从列表中剩下的数字(N-1)中选择另一个数字,然后也使用它。
如果列表为空,则继续进行此操作。
我已经对某个东西进行了计数,并且结果是N。
现在我想要一个列表,其中包含1到N的数字。
例:
N = 5
那么,count_list = [1,2,3,4,5]
另外,一旦我创建了这个列表,我想随机从列表中选择一个数字并使用该数字。
之后,我想从列表中剩下的数字(N-1)中选择另一个数字,然后也使用它。
如果列表为空,则继续进行此操作。
您可以通过类似以下方式创建元素的枚举:
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指出的那样,在Python 3中,xrange
内置函数已被重命名为range
。
xrange
在 Python3 中无法使用。简单使用 range
替代即可。 - takasoftimport 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'
while count_list:
εΑ±ηΕ≥δΜΞφΒ΄η·ïcount_list
φ‰·εêΠδΗΚγ©Κεà½ηΓ®... - eumiro>>> 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]
这是一个大致的想法。
顺便说一下,你可能也对阅读 在Python中实现无重复元素的随机选择列表感兴趣。
有几种快速随机选择的实现。
如果您想随机选择一个元素,就无需计数。只需使用random.choice()
并传入您的可迭代对象即可:
import random
items = ['foo', 'bar', 'baz']
print random.choice(items)
random.randint(1, count+1)
。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([])
您可以使用:
import random
random.choice(range(n))
或者:
random.choice(range(1,n+1))
如果你想从1
到n
而不是从0
开始。
count_list = range(1, N+1)
选择随机元素:
import random
random.choice(count_list)
[x+1 for x in xrange(N)] == range(1, N+1)
- Fred Foo