首页 > 解决方案 > 如何从列表中的整数中删除重复数字

问题描述

我有这个清单

names = [ ["cat", 9112, "dog123", 5625], ["luck", 1232, "bad23"] ]

根据这个问题 ,我已经使用此代码完成了

names = [ ["cat", 9112, "dog123", 5625], ["luck", 1232, "bad23"] ]
new = [[x for x in y if isinstance(x, int)] for y in names]

输出 -: [[9112, 5625], [1232]]


问题

现在我想删除这样的重复数字。

expected output -: [[912, 562], [123]]

我正在使用此代码,但它不起作用

m = sorted(list(set(new)))
print(m)

错误 -:

Traceback (most recent call last):    
   File "main.py", line 13, in <module>     
     m = sorted(list(set(new)))     
TypeError: unhashable type: 'list'

注意 - :我只想保留第一个原始数字。(例如 - :1232需要变为123not 132

标签: pythonpython-3.xlist

解决方案


列表是可变的;在 Python 中,可变容器是不可散列的。set(names)需要对 的元素进行散列以names对其进行排序,但您的names列表具有列表,因为它是元素(["cat", 9112, "dog123", 5625]["luck", 1232, "bad23"]),因此,它不能转换为set.

尝试这个:

names = [ ["cat", 9112, "dog123", 5625], ["luck", 1232, "bad23"] ]

li = [[x for x in y if isinstance(x, int)] for y in names]
final = [["".join(sorted(set(str(x)), key=str(x).index)) for x in y] for y in li]
print(li)
print(final)

它提供以下输出:

[[9112, 5625], [1232]] 
[['912', '562'], ['123']] 

编辑:

该解决方案将提供所需的结果。它可能不是最佳和最佳解决方案,OP 没有提到任何与性能相关的内容。


推荐阅读