2017-10-06 47 views
2

如何比較兩個無序列表與無序列表中的列表?如何比較列表中無序列表的兩個無序列表?

假設兩個列表中的列表不一定是相同的順序。另外假設列表中的列表中的項目順序不一定是相同的順序。一個例子如下:

dummy_list_A = [['A'], ['B'], ['C', 'D']] 
dummy_list_B = [['B'], ['A'], ['D', 'C']] 

我已經看過的堆棧溢出的問題的答案,如Test if two lists of lists are equal和他們沒有工作。您可以在下面看到,比較列表列表的最常見答案不適用於我的場景。

print sorted(dummy_list_A) == sorted(dummy_list_B) 
False 

print set(map(tuple,dummy_list_A)) == set(map(tuple,dummy_list_B)) 
False 

print ((len(dummy_list_A) == len(dummy_list_B)) and (all(i in dummy_list_B for i in dummy_list_A))) 
False 
+1

應該將[['A'],['C'],['B','D']]與其中任何一個進行比較嗎? –

+0

元素是否可拆分?建築物(冷凍)套裝可能比分揀效率更高。 – chepner

+0

@chepner這可能不起作用,因爲它不會影響重複的元素。 –

回答

1

你可以簡單地在子列表中的元素進行排序,該排序子列表和兩個列表進行比較。

>>> dummy_list_A = [['A'], ['B'], ['C', 'D']] 
>>> dummy_list_B = [['B'], ['A'], ['D', 'C']] 
>>> sorted(map(sorted, dummy_list_A)) 
[['A'], ['B'], ['C', 'D']] 
>>> sorted(map(sorted, dummy_list_B)) 
[['A'], ['B'], ['C', 'D']] 
>>> def signature(l): 
... return sorted(map(sorted, l)) 
... 
>>> signature(dummy_list_A) == signature(dummy_list_B) 
True 
3

首先,你需要

>>> sorted([sorted(i) for i in dummy_list_A]) 
[['A'], ['B'], ['C', 'D']] 

>>> sorted([sorted(i) for i in dummy_list_B]) 
[['A'], ['B'], ['C', 'D']] 

>>> sorted([sorted(i) for i in dummy_list_A]) == sorted([sorted(i) for i in dummy_list_B]) 
True 
0
dummy_list_A = [['A'], ['B'], ['C', 'D']] 
dummy_list_B = [['B'], ['A'], ['D', 'C']] 
print(sorted(sum(dummy_list_A,[])) == sorted(sum(dummy_list_B,[]))) 

+0

'[['A','B','C','D']]'將被認爲與此方法相同。 –

+0

我不認爲OP已經指定,如果它不應該是平等的。 – Bhupen

0

你既可以內部列表進行排序子列表列表的列表元素,然後主列表進行排序和列表使用Python的.sort()方法。

list_1 = [['A'], ['B'], ['C', 'D']] 
    list_2 = [['B'], ['A'], ['D', 'C']] 

    def list_sorter(list_of_list): 
     for a_list in list_of_list: 
      a_list.sort() 
     list_of_list.sort() 
    list_sorter(list_1) 
    list_sorter(list_2) 
    print(list_1 == list_2) 
    True 
+0

請確保你添加了一些關於你的答案的描述。這是你可以在SO中遵循的一個好習慣。 –

0

這我該如何解決它。

sorted(dummy_list_B, key=lambda x: sorted(x)) == sorted(dummy_list_A, key=lambda x: sorted(x))