您好,请使用下面的代码,当size> 5时,将引发以下错误。python 2.7中是否会存在另一个随机函数,该函数可以从初始个体生成6个或更多不同的样本,因此总体上将附加6个列表。谢谢
import random as rand
population = []
individual = [1,2,3,4,5]
size = 5
for ind in individual:
population.append((rand.sample(individual, size)))
print "pop", population
#output
pop = [[1, 3, 5, 2, 4], [3, 4, 5, 2, 1], [3, 1, 2, 4, 5], [1, 5, 3, 4, 2], [1, 5, 3, 2, 4]]
#Error Message Traceback (most recent call last): File "C:/Users/AMAMIFE/Desktop/obi/tt.py", line 10, in <module> population.append((rand.sample(individual, size))) File "C:\Python27\x86\lib\random.py", line 321, in sample raise ValueError("sample larger than population") ValueError: sample larger than population
您在sample
这里使用的方式似乎不正确。从中随机random.sample(a_sequence, n)
选择n
对象a_sequence
。例如:
>>> import random
>>> my_list = range(5)
>>> random.sample(my_list, 3)
[0, 3, 2]
>>> random.sample(my_list, 3)
[4, 1, 0]
>>> random.sample(my_list, 3)
[2, 0, 4]
>>> random.sample(my_list, 3)
[4, 0, 2]
>>> random.sample(my_list, 3)
[1, 4, 3]
尝试从5个项目的列表中采样6个项目是没有意义的。取出5个项目后,没有第六个项目可供您取出。
当您说要从大小为5的列表中抽样5个项目时,只是说您希望所有内容都以随机顺序排列。如果要获取n
这些,请尝试使用itertools.permutations
:
>>> import random
>>> import itertools
>>> my_list = range(5)
>>> random.sample(list(itertools.permutations(my_list)), 5)
[(4, 2, 1, 3, 0), (3, 0, 2, 4, 1), (2, 3, 0, 4, 1), (4, 3, 0, 1, 2), (4, 0, 3, 2, 1)]
>>> random.sample(list(itertools.permutations(my_list)), 6)
[(0, 2, 1, 4, 3), (1, 2, 4, 0, 3), (1, 0, 3, 2, 4), (2, 1, 4, 3, 0), (0, 3, 2, 1, 4), (4, 2, 0, 1, 3)]
>>> random.sample(list(itertools.permutations(my_list)), 7)
[(4, 3, 1, 2, 0), (3, 0, 1, 2, 4), (2, 0, 1, 3, 4), (4, 2, 3, 1, 0), (0, 4, 1, 3, 2), (3, 0, 2, 1, 4), (0, 1, 2, 3, 4)]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句