【问题标题】:Find duplicate list in a list of lists? [duplicate]在列表列表中查找重复列表? [复制]
【发布时间】:2021-10-19 14:27:09
【问题描述】:

我有一个这样的列表:

data = [[4,5,0],[3,4,0],[4,5,0],[1,2,0],[1,2,0],[4,5,0],[3,4,0],[2,3,0]]

我想要的是返回一个唯一列表的列表(顺序无关紧要):

unique_data =[[4,5,0],[3,4,0],[1,2,0],[2,3,0]]

我的第一个想法是:

for x,y in zip(data, data[1:])):
        if x == y:
               unique_data.append(x)

但这只会比较两个直接相邻的列表。非常感谢任何其他想法。谢谢。

【问题讨论】:

  • if x in list_name:
  • @Have a nice day 这是在 for 循环中吗?
  • set(map(tuple, data))
  • @pariskey 无法及时添加解决方案,我在重复链接中写了:stackoverflow.com/questions/41809663/…

标签: python


【解决方案1】:

您可以做的一件事是将列表转换为元组(因为元组是可散列的并且可以放入set),然后将其转换为一个集合以过滤掉重复项,然后再返回。

data = [[4,5,0],[3,4,0],[4,5,0],[1,2,0],[1,2,0],[4,5,0],[3,4,0],[2,3,0]]

unique_data = [list(tup) for tup in set(tuple(lst) for lst in data)]
# [[2, 3, 0], [3, 4, 0], [4, 5, 0], [1, 2, 0]]

【讨论】:

    【解决方案2】:

    遍历您的data,仅当它不在保存列表中时才保存它

    data = [[4, 5, 0], [3, 4, 0], [4, 5, 0], [1, 2, 0], [1, 2, 0], [4, 5, 0], [3, 4, 0], [2, 3, 0]]
    
    result = []
    for x in data:
        if x not in result:
            result.append(x)
    

    【讨论】:

      【解决方案3】:

      您可以尝试使用set 删除重复项。

      由于lists不能被散列,

      • 将单个列表转换为元组。
      • 将它们添加到 set 中,以便其中仅存在唯一的元组。
      • 根据需要将元组转换回列表。
      data = [[4,5,0],[3,4,0],[4,5,0],[1,2,0],[1,2,0],[4,5,0],[3,4,0],[2,3,0]]
      data = [tuple(x) for x in data]
      ans = [list(x) for x in list(set(data))]
      print(ans)
      
      [[2, 3, 0], [3, 4, 0], [4, 5, 0], [1, 2, 0]]
      

      【讨论】:

      • list(map(list, set(map(tuple, data)))) 如果你想要一个班轮。或[list(x) for x in {tuple(i) for i in data}]