0
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]。请帮忙。我非常想了解如何正确地分隔函数并在逻辑上使用循环!

4

1 回答 1

0
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==1并且 j==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],]

我=1

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

我=3

j=0
sublist1 = [1,2,3,4,5]
sublist2 = [4,10,1,7,8]
etc
于 2012-11-26T13:26:24.273 回答