1

このような2つのリストがあります

Nodelist1=[[['B', 10], ['IN', 1000]], [['C', 15], ['OUT', 1001]], [['F', 30], ['IN', 1100]]]
Nodelist2= [[['G', 20], ['IN', 1000, 'OUT', 1111]], [['D', 25], ['INWARD', 1]]]

私がやろうとしているのは、この2つのリストを次のように比較することです

if len(Nodelist1[i][1])==len(Nodelist2[j][1]) 

Nodelist1[i][0]条件が真の場合、 which is ['B', 10]and fromNodelist1およびNodelist2[j][1]which is ['D', 25]fromを削除したいと思いNodelist2ます。

それから私は持っているべきです

Nodelist1 as [[['C', 15], ['OUT', 1001]], [['F', 30], ['IN', 1100]]]
Nodelist2 as [[['G', 20], ['IN', 1000, 'OUT', 1111]]]

私のコードは次のようなものです:

   if len(Nodelist1)>len(Nodelist2):
      for i in range(len(Nodelist1)):
         for j in range(len(Nodelist2)):
            if len(Nodelist1[i][1])==len(Nodelist2[j][1]):
                if Nodelist1[i][1]==Nodelist2[j][1]:
                    Nodelist1.remove(Nodelist1[i])
                    Nodelist2.remove(Nodelist2[j])  
                else:
                    Nodelist1.remove(Nodelist1[i])
                    Nodelist2.remove(Nodelist2[j])  

それは私にエラーを与えます:

if len(Nodelist1[i][1])==len(Nodelist2[j][1]):
    IndexError: list index out of range
4

3 に答える 3

1

あなたのやり方でリストから項目を削除するのはかなり悪い考えです。

for i in range(len(Nodelist1)):
    pass

次のようなことができます。

if len(Nodelist1)>len(Nodelist2):
    # store indexes of items to remove
    list1_to_del = []
    list2_to_del = []
    for i, item1 in enumerate(Nodelist1):
        for j, item2 in enumerate(Nodelist2):
            if len(item1) == len(item2):
                list1_to_del.append(i)
                list2_to_del.append(j)
             else:
                pass # not sure of your intensions and indentation

    # filter lists
    if list1_to_del:
        Nodelist1 = [item for i, item in enumerate(Nodelist1) if i not in set(list1_to_del)]
    if list2_to_del:
        Nodelist2 = [item for i, item in enumerate(Nodelist12) if i not in set(list2_to_del)]

しかし、解決策はやや不器用です:/

于 2013-07-17T16:18:37.957 に答える