python - 如何从列表中的整数中删除重复数字
问题描述
我有这个清单
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
需要变为123
not 132
)
解决方案
列表是可变的;在 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 没有提到任何与性能相关的内容。
推荐阅读
- android - 如何正确使用 Android MediaStore?
- python - Recursive ffmpeg script preserving the subfolder structure
- swiftui - 文本中的 SwiftUI 值不会改变
- python - 定义后将 Qt 属性附加到 Python 类;无法从 QML 访问
- scope - 谷歌驱动 API 范围:https://www.googleapis.com/auth/drive
- swift - 如何快速从协议中返回类型
- vue.js - 寻找Vue的连续滑动轮播
- python - MultiHeadAttnetion 中的 att_mask 和 key_padding_mask 有什么区别
- database - 获取时Android SQlite数据库游标列-1错误
- c - C 在使用 gcc 编译的 Windows 10 上的 Geany 中包含自定义头文件