Reputation: 145
I'm making a function that puts together a 3d list called param_list. In the last for loop of the function, all the list values are what I want them to be, but then right outside the loop the values are wrong
def make_param_combos( params ):
size = []
param_list = []
temp_params = []
one_param = ['param','value']
num_params = len( params )
for j in range( num_params ) :
if j == 0 :
size.append( len(params[j][1] ) )
else :
size.append( len(params[j][1]) * size[j-1] )
num_combos = size[j]
for i in range( num_combos ) :
temp_params.clear()
for j in range( num_params ) :
one_param = [ params[j][0], params[j][1][ int( np.mod( len( params[j][1] ) * i/size[j], len( params[j][1] ) ) ) ] ]
temp_params.append( one_param )
param_list.append( temp_params )
print( "loop iter", i, param_list[i] )
print( "out of loop" )
print( param_list )
return param_list
plist = make_param_combos([[['param1'],['v11','v12']],[['param2'],['v21','v22']],[['param3'],['v31','v32']]])
print( "out of function" )
for i in range(len(plist)):
print(plist[i])
the result:
loop iter 0 [[['param1'], 'v11'], [['param2'], 'v21'], [['param3'], 'v31']] loop iter 1 [[['param1'], 'v12'], [['param2'], 'v21'], [['param3'], 'v31']]
loop iter 2 [[['param1'], 'v11'], [['param2'], 'v22'], [['param3'], 'v31']]
loop iter 3 [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v31']]
loop iter 4 [[['param1'], 'v11'], [['param2'], 'v21'], [['param3'], 'v32']]
loop iter 5 [[['param1'], 'v12'], [['param2'], 'v21'], [['param3'], 'v32']]
loop iter 6 [[['param1'], 'v11'], [['param2'], 'v22'], [['param3'], 'v32']]
loop iter 7 [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]
out of loop [[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']], [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']], [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']], [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']], [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']], [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']], [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']], [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]]
out of function
[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]
[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]
[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]
[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]
[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]
[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]
[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]
[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]
Upvotes: 0
Views: 35
Reputation: 12927
Replace temp_params.clear()
with temp_params = []
. You need a new list, .clear()
will delete all elements from the old list - the one you have just appended to param_list
. You have appended this list, the one you're clearing now, not its copy.
Upvotes: 2