用于创建和操作列表的Python函数

时间:2013-07-04 15:33:36

标签: python list numpy

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

2 个答案:

答案 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。