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

如何统计列表中包含数组的唯一元组数量?转set报unhashable错误

报错原因

Python的set要求存储的元素必须是*可哈希(hashable)*的类型,核心要求是对应类型不可变。你遇到的报错有两个明确原因:

  • 你预期列表元素为元组,但实际存在元素为列表的情况(你贴出的真实数据样例单个元素使用[]方括号包裹,列表本身就是不可哈希类型)
  • 即使元素为元组,元组内包含的numpyarray数组属于可变类型,本身也不支持哈希计算
解决方案

下面提供两种适配不同场景的实现方案:

方法1:转可哈希元组统计(精度无损失)

将每个元素内的numpy数组先转为可哈希的元组类型,再存入set统计唯一值,适合数据量不大的场景,不会出现判断误差:

unique_container = set()
for pair in pair_list:
    # 先强制把外层转为元组避免原数据为列表的问题,再把每个array拉平后转元组
    hashable_pair = tuple(tuple(arr.flatten()) for arr in tuple(pair))
    unique_container.add(hashable_pair)

# 输出唯一元组的数量
print(len(unique_container))

如果你的数组都是一维结构,可以去掉flatten()方法,直接转元组即可。

方法2:哈希摘要统计(适合大尺寸数组)

如果单个数组的元素量很大,转元组的运行开销过高,可以计算数组的哈希摘要后再进行统计:

import hashlib

def calc_arr_hash(arr):
    # 把数组二进制内容转为sha256摘要
    return hashlib.sha256(arr.tobytes()).digest()

unique_container = set()
for pair in pair_list:
    hashable_pair = tuple(calc_arr_hash(arr) for arr in tuple(pair))
    unique_container.add(hashable_pair)

print(len(unique_container))

该方法运行效率更高,仅存在理论级别的极低概率哈希碰撞风险,日常使用场景下完全可以忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:09:01