You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Python列表中的唯一嵌套列表?解决不可哈希类型错误

解决嵌套列表去重的TypeError问题

你遇到的TypeError: unhashable type: 'list'是因为集合(set)要求元素必须是可哈希类型,而列表(list)是不可哈希的。你之前的代码只把外层子列表转成了tuple,但子列表内部的元素(比如[14]、['walk'])还是列表,依然不可哈希,所以无法存入集合。

要解决这个问题,需要把嵌套结构里的所有列表都转换成可哈希的类型(比如tuple),去重后再转换回列表。这里提供两种方法:

方法1:递归转换(通用任意嵌套深度)

写两个递归函数,分别负责把嵌套列表转成可哈希的tuple结构,以及把tuple转回列表:

def to_hashable(item):
    if isinstance(item, list):
        return tuple(to_hashable(i) for i in item)
    return item

def from_hashable(item):
    if isinstance(item, tuple):
        return list(from_hashable(i) for i in item)
    return item

# 你的原始列表
lst = [
    [[14], ['walk'], [69], ['walk'], [7]],
    [[14], ['walk'], [69], ['walk'], [7]],
    [[30], [948], [75], [947], [10]],
    [[14]]
]

# 转换为可哈希结构并去重
hashable_items = [to_hashable(sub) for sub in lst]
unique_hashable = set(hashable_items)
# 转回列表结构
unique_data = [from_hashable(item) for item in unique_hashable]

print(unique_data)

方法2:手动转换(固定两层嵌套)

如果你的列表嵌套深度固定为两层(外层列表→子列表→内层列表),可以直接手动转换两层结构,不用递归:

lst = [
    [[14], ['walk'], [69], ['walk'], [7]],
    [[14], ['walk'], [69], ['walk'], [7]],
    [[30], [948], [75], [947], [10]],
    [[14]]
]

# 把所有内层列表转成tuple,外层子列表也转成tuple
hashable_lst = [tuple(tuple(i) for i in sub) for sub in lst]
# 去重
unique_hashable = set(hashable_lst)
# 转回列表结构
unique_data = [list(list(i) for i in item) for item in unique_hashable]

print(unique_data)

两种方法最终都会得到你期望的输出:

[[[14], ['walk'], [69], ['walk'], [7]], [[30], [948], [75], [947], [10]], [[14]]]

内容的提问来源于stack exchange,提问作者ask_10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:25:18