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

问题描述:

我想从嵌套列表中提取唯一数据,请参见下文。我实现了这两种方式。第一个工作正常,但第二个失败。计算过程中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

试试看:

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

不能列出的名单上使用set(),因为列表不是可哈希。您将列表列表转换为元组列表。应用set()删除重复项。然后将de重复的元组列表转换回列表列表。

你可以使用enumerate测试,有没有这样的副本,只有采取的副本一审电流值之前:

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