【问题标题】:Extract unique list from nested list in Python从Python中的嵌套列表中提取唯一列表
【发布时间】:2018-03-23 11:53:21
【问题描述】:

我想从嵌套列表中提取唯一数据,见下文。我实现了两种方式。第一个效果很好,但第二个失败了。计算时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']] 

【问题讨论】:

  • 是的,列表推导执行过程中new_data为空,执行后结果赋值给new_data
  • 只使用您的原始版本...您就是这样修复它的。
  • 测试时new_data 中没有任何内容:if d not in new_data。列表推导运行完成,然后继续使用赋值运算符将结果保存回new_data
  • This Q&A 解释了为什么列表理解不起作用

标签: python python-3.x


【解决方案1】:

试试吧:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-26
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      • 2015-11-28
      • 2022-01-05
      • 2017-02-26
      相关资源
      最近更新 更多