我有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
我几乎尝试过所有事情。我究竟做错了什么?任何帮助将不胜感激。感谢。
答案 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