Беда с петлями и списками - PullRequest
0 голосов
/ 16 апреля 2020

Я делаю функцию, которая собирает трехмерный список с именем param_list. В последнем случае для l oop функции все значения списка - это то, что я хочу, чтобы они были, но затем прямо за l oop значения неверны

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])

результат:

l oop iter 0 [[['param1'], 'v11'], [['param2'], 'v21'], [['param3'], 'v31'] ] l oop iter 1 [[['param1'], 'v12'], [['param2'], 'v21'], [['param3'], 'v31']]

l oop iter 2 [[['param1'], 'v11'], [['param2'], 'v22'], [['param3'], 'v31']]

l oop iter 3 [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v31']]

l oop iter 4 [[['param1'], 'v11'], [['param2'], 'v21'], [['param3'], 'v32']]

l oop iter 5 [[['param1'], 'v12'], [['param2'], 'v21'], [['param3'], 'v32']]

l oop iter 6 [[['param1'], 'v11'], [['param2'], 'v22'], [['param3'], 'v32']]

l oop iter 7 [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]

из l oop [[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']], [[['p aram1 '],' 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']]

[[['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']]

1 Ответ

2 голосов
/ 16 апреля 2020

Заменить temp_params.clear() на temp_params = []. Вам нужен новый список, .clear() удалит все элементы из старого списка - тот, который вы только что добавили к param_list. Вы добавили этот список , который вы сейчас очищаете, а не его копию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...