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 を適切に比較し、一致を返そうとしています。プログラムは、他の反復の中でリストの一致を返すという意味でほとんど機能します。繰り返しを2回発生させて返すことができないようです[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 は 0、それ以外の場合、j は 1 です。あなたのコードには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],]

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
于 2012-11-26T13:26:24.273 に答える