【问题标题】:python matching list of listspython匹配列表列表
【发布时间】:2012-11-23 20:06:14
【问题描述】:
def compare_two_lists(list1,list2):
   i=0
   j=0
   while i < len(list2) :
      if i%2 == 0:
         j == 0
      else:
         j == 1
      for sublist2 in list2[i:] :
         for sublist in list1[j:]:
            #sublist.intersection(sublist2)
            intersect =  [x for x in sublist if x in sublist2]
            print('from set ',sublist, len(intersect),' matched number(s): ', intersect)
            i=i +1

compare_two_lists([[1,2,3,4,5],[20,30]],[[5,3,7,8,1],[20,10],[4,10,1,7,8],[30,20]])

我正在尝试获取列表 1 的列表 0 和 1 以适当地比较列表 2 的列表 0、1、2 和 3 并返回匹配项。该程序几乎可以正常工作,因为它确实会在其他迭代中返回列表的匹配项。我似乎无法让迭代发生两次并返回[1,3,5],[20], [1,4],[20,30]。请帮忙。试图理解如何正确地分隔函数并在逻辑上使用循环,我快疯了!

【问题讨论】:

  • 所以“设置”是指“列表”...查找它们,它们是不同的东西

标签: list python-3.x


【解决方案1】:
def compare_two_lists(list1,list2):
    lRet = []                         #a
    for i in range(len(list2)):       #b
        j= i%2                        #c
        sublist1 = list1[j]           
        sublist2 = list2[i]           
        lRet.append([x for x in sublist1 if x in sublist2])   
    return lRet 

compare_two_lists([[1,2,3,4,5],[20,30]],[[5,3,7,8,1],[20,10],[4,10,1,7,8],[30,20]])

这似乎可以解决问题。这是一个解释(见上面的行标签):

  • a:lRet 已初始化。我们正在这个变量中建立一个列表列表
  • b: i 遍历 list2 的每个索引
  • c:如果 i 是偶数,则 j 为零,否则 j 为一。你的代码中有j==1j==0。这些运算符不会更改任何操作数值。你的意思是j=1 等,但这种方式更快

为了解释其余部分,我将使用您的示例输入列表来讨论实际迭代:

i = 0(第一次迭代)

j=0 
sublist1 = [1,2,3,4,5]
sublist2 = [5,3,7,8,1]
intersection is [1,3,5]. we APPEND this to lRet. 
thus lRet = [[1,3,5],]

i=1

j=1
sublist1 = [20,30]
sublist2 = [20,10]
the intersection is [20,]
thus lRet = [[1,3,5],[20]]

i=3

j=0
sublist1 = [1,2,3,4,5]
sublist2 = [4,10,1,7,8]
etc

【讨论】:

  • 抱歉这么慢。非常感谢您的帮助。我对任何人对这个问题感兴趣都感到绝望。将尝试解决您的解决方案,并更深入地了解逻辑!
  • 太棒了。完美运行,感谢您的解释。现在清楚多了
猜你喜欢
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 2015-07-03
  • 2014-05-31
  • 1970-01-01
相关资源
最近更新 更多