0

我有一个包含 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

我几乎尝试了一切。我究竟做错了什么?任何帮助将不胜感激。谢谢。

4

2 回答 2

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
于 2013-07-04T18:50:27.273 回答
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]
>>> 
于 2013-07-04T18:44:20.467 回答