1

我有一个以数字为参数的函数。这个函数应该创建一个现有列表(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 中以相同的值运行......它没有选择任何其他值!

4

2 回答 2

1

您的问题可能是new_list[new_list.index(x)]=variable分配给x列表中的第一个,这不一定是 selected 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

于 2013-07-04T18:33:33.137 回答
0

从我看待事物的方式来看。您正在创建一个值列表,然后从该列表中选择一个随机数。现在,您的问题似乎是您每次都想要一个随机或不同的数字。

并非所有数字都被操纵,这并非不可能,毕竟这是随机的。但是,您可能想要绘制此图,并查看是否所有成员都随着您增加循环数而发生变化。即使在那之后,如果不是所有的值都被操纵,那么你的算法可能有问题。

因此,一个简单的方法是使用 matplotlib。

于 2013-07-04T15:43:31.373 回答