使用列表在需求供应的唯一匹配中使用python进行模拟

时间:2018-04-18 17:35:24

标签: python-2.7 for-loop simulation

我有列表列表形式的数据,我试图匹配需求和供应,使每个需求唯一匹配一个供应项目。

dmndId_w_freq = [['a',4,[1,2,3,4]],['b',6,[5,6,7,8,3,4]],['c',7,[6,5,7,9,8,3,4]],['d',8,[1,6,3,4,5,6,7,10]]]
num_sims = 1
for sim_count in range(num_sims):
 dmndID_used_flag = {}
 splID_used_flag  = {}
 dmndID_splId_one_match = {}
 for i in dmndId_w_freq:
  if i[0] not in dmndID_used_flag.keys():
   for j in i[2]:
    #print j
    #print "CLICK TO CONTINUE..."
    #raw_input()
    if j in splID_used_flag.keys():
     i[2].remove(j)
  dmndID_splId_one_match[i[0]] =  i[2][0]
  splID_used_flag[i[2][0]] = 1
  dmndID_used_flag[i[0]] = 1
  print
  print dmndID_splId_one_match 
  #print splID_used_flag  
  #print dmndID_used_flag 
  #raw_input()

我希望输出dmndID_splId_one_match类似于{' a':1,'':5,' c':6,&#39 ; d':3}。 但我最终得到了{' a':'':''''':'':': 所以我没有得到一个独特的匹配,因为供应项目6被映射到需求' c'以及需求'。 我尝试通过循环来调试代码,似乎问题出现在for-loop

for j in i[2]:

代码没有经过i [2]的所有元素。这不会发生在' a'和' b'部分。但是开始发生在' c'部分。它超过6和5,但跳过7(列表的第三个元素[6,5,7,9,8,3,4])。同样,在' d'部分它跳过列表[1,6,3,4,5,6,7,10]中的第二个元素6。这就是映射发生两次的原因,因为我无法将其删除。

  1. 我没有按预期执行for循环,我做错了什么?

  2. 有没有更好的方法来编写此代码?

1 个答案:

答案 0 :(得分:0)

I figured out the problem in the for loop. I am looping through i[2] and then trying to modify it within the loop. this makes it unstable.