如何从列表中的整数中删除重复的数字

Kal*_*ana 6 python list python-3.x

我有这个清单

names = [ ["cat", 9112, "dog123", 5625], ["luck", 1232, "bad23"] ]
Run Code Online (Sandbox Code Playgroud)

根据这个问题, 我使用这段代码完成了

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

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


问题

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

expected output -: [[912, 562], [123]]
Run Code Online (Sandbox Code Playgroud)

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

m = sorted(list(set(new)))
print(m)
Run Code Online (Sandbox Code Playgroud)

错误 -:

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

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

abh*_*ora 6

列表是可变的;在 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)
Run Code Online (Sandbox Code Playgroud)

它提供以下输出:

[[9112, 5625], [1232]] 
[['912', '562'], ['123']] 
Run Code Online (Sandbox Code Playgroud)

编辑:

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