操纵Python列表

时间:2013-07-04 18:35:44

标签: python list function

我有100个元素的列表。我正在尝试创建一个函数,该列表将生成该列表的300个副本,然后将这些副本存储到空白列表中。然后,我需要该函数从每个复制的列表中随机选择一个索引值。因此,它可能会在第一个复制列表中选择第25个索引值,然后它可能会在下一个复制列表中选择第60个索引值。然后,值的索引是预定义函数的参数。问题是我的复制列表没有被操纵。

我的代码如下:

def condition_manipulate(value):
    list_set=[]                  #this is the list in which the copied lists will go
    for i in range(0,value):
        new_list=initial_conditions[:]    #initial_conditions is the list to be copied
        list_set.append(new_list)
        for i in list_set:           #My confusion is here. I need the function to choose
            for j in i:              #A random value in each copied list that resides
                 x=random.choice(i)  #In list_set and then run a predefined function on it.
                 variable=new_sum(i.index(x)
                 i[i.index(x)]=variable
    return list_set

#running condition_manipulate(300) should give me a list with 300 copies of a list
#Where a random value in each list is manipulated by the function new_sum

我几乎尝试过所有事情。我究竟做错了什么?任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

如果你真的需要列表副本而不是浅层副本,那么你需要:

import copy

oldlist = [.....]
newlist = copy.deepcopy(oldlist)

否则所有副本都是相同的列表。>>> o = [1,2,3]

>>> n = o
>>> n.append(4)
>>> o
[1, 2, 3, 4]
>>> n = copy.deepcopy(o)
>>> n
[1, 2, 3, 4]
>>> n.append(5)
>>> n
[1, 2, 3, 4, 5]
>>> o
[1, 2, 3, 4]
>>> 

答案 1 :(得分:1)

尝试:

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