【问题标题】:Trouble with for loops and listsfor 循环和列表的问题
【发布时间】:2020-04-15 22:23:27
【问题描述】:

我正在制作一个将名为 param_list 的 3d 列表放在一起的函数。在函数的最后一个 for 循环中,所有列表值都是我想要的,但是在循环之外,值是错误的

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

结果:

循环迭代器 0 [[['param1'], 'v11'], [['param2'], 'v21'], [['param3'], 'v31']] 循环迭代器 1 [[['param1'], 'v12'], [['param2'], 'v21'], [['param3'], 'v31']]

循环迭代器 2 [[['param1'], 'v11'], [['param2'], 'v22'], [['param3'], 'v31']]

循环迭代 3 [[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v31']]

循环迭代 4 [[['param1'], 'v11'], [['param2'], 'v21'], [['param3'], 'v32']]

循环迭代 5 [[['param1'], 'v12'], [['param2'], 'v21'], [['param3'], 'v32']]

循环迭代 6 [[['param1'], 'v11'], [['param2'], 'v22'], [['param3'], 'v32']]

循环迭代 7 [[['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']]

[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]

[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]

[[['param1'], 'v12'], [['param2'], 'v22'], [['param3'], 'v32']]

【问题讨论】:

    标签: python list for-loop


    【解决方案1】:

    temp_params.clear() 替换为temp_params = []。您需要一个列表,.clear() 将从旧列表中删除所有元素 - 您刚刚附加到 param_list 的那个。您添加了此列表,即您现在正在清除的列表,而不是它的副本。

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      相关资源
      最近更新 更多