从Python中的嵌套列表中提取唯一列表

时间:2017-10-11 17:40:57

标签: python python-3.x

我想从嵌套列表中提取唯一数据,请参阅下文。我实现了两种方式。第一个效果很好,但第二个失败了。计算期间new_data是空的吗?我该如何解决?

 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']] 

2 个答案:

答案 0 :(得分:2)

试试吧:

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

您不能在列表列表中使用set(),因为列表不可清除。您将列表列表转换为元组列表。应用set()删除重复项。然后将de duplicated元组列表转换回列表列表。

答案 1 :(得分:0)

您可以使用enumerate来测试当前值之前没有副本,以便只获取副本的第一个实例:

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