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)
列表是可变的;在 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 没有提到与性能相关的任何内容。
| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |