2017-10-11 77 views
1

我想從嵌套列表中提取唯一數據,請參見下文。我實現了這兩種方式。第一個工作正常,但第二個失敗。計算過程中new_data是否爲空?我該如何解決它?在Python中從嵌套列表中提取唯一列表

data = [                                  
    ['a', 'b'],                                
    ['a', 'c'],                                
    ['a', 'b'],                                
    ['b', 'a']                                 
]                                    

# working                                   
new_data = []                                 
for d in data:                                 
    if d not in new_data:                              
     new_data.append(d)                              
print(new_data)                                
# [['a', 'b'], ['a','c'], ['b','a']]                           

# Failed to extract unique list                                 
new_data = []                                 
new_data = [d for d in data if d not in new_data]                        
print(new_data)                                
# [['a', 'b'], ['a', 'c'], ['a', 'b'], ['b', 'a']] 
+3

是,'new_data'列表的執行過程中是空的理解,其結果在執行後分配給'new_data'。 –

+1

只需使用您的原始版本...這就是你如何解決它。 –

+0

當你測試:'if d not in new_data'時,'new_data'中沒有任何東西。列表解析運行完成,然後繼續賦值運算符以將結果保存回'new_data' – Aaron

回答

2

試試看:

new_data = [list(y) for y in set([tuple(x) for x in data])] 

不能列出的名單上使用set(),因爲列表不是可哈希。您將列表列表轉換爲元組列表。應用set()刪除重複項。然後將de重複的元組列表轉換回列表列表。

0

你可以使用enumerate測試,有沒有這樣的副本,只有採取的副本一審電流值之前:

new_data = [item for index, item in enumerate(data) if item not in data[:index]]