我有一个以数字作为参数的函数。此函数应该创建现有列表的副本(100个元素),然后操作随机选择的列表中的值。例如,如果我给函数一个200的参数,它必须创建一个新列表并每次随机选择一个值,确保在200次创建新列表时,原始现有列表中的每个元素100个元素至少被操纵一次。这些数据将在稍后绘制。我一直注意到我写的函数并没有操纵每一个元素。我的代码如下:
def condition_manipulate(value):
list_set=[]
for i in range(0,value):
new_list=initial_conditions[:]
x=random.choice(new_list)
variable=new_sum(new_list.index(x)) #new_sum is a pre-defined function
new_list[new_list.index(x)]=variable
list_set.append(new_list)
return list_set
问题可能是我选择了random.choice,这不是让condition_manipulate运行 initial_conditions中的每个元素至少有一次,但是我该怎么做才能解决这个问题?
编辑:我刚刚绘制了数据并发现它继续在new_list中运行相同的值...它没有选择任何其他值!答案 0 :(得分:1)
您的问题可能是new_list[new_list.index(x)]=variable
分配给列表中的第一个x
,这不一定是所选的x
。尝试:
import random
def condition_manipulate(value):
list_set=[]
for i in range(value):
new_list=initial_conditions[:]
i=random.choice(range(len(initial_conditions)))
new_list[i]=new_sum(new_list[i])
list_set.append(new_list)
return list_set
除了随机性之外,使用索引比始终搜索x
的整个列表更有效。
答案 1 :(得分:0)
从我看待事物的方式。您正在创建值列表,然后从该列表中选择一个随机数。现在,您的问题似乎是每次都想要一个随机或相当不同的数字。
你不可能不是所有数字都被操纵,毕竟这是随机的。但是,您可能希望对此进行图形化,并查看是否在增加循环次数时更改了所有成员。即使在此之后,如果不是所有的值都被操纵,那么您的算法可能会出现问题。
因此,一个简单的方法是使用matplotlib。