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

如何检测类中按键绑定列表里的重复子列表?

问题原因

你遇到的unhashable type: 'list'错误,是因为列表(list)属于可变类型,无法被哈希,而集合(set)的元素必须是可哈希类型,所以直接将子列表放入set会触发报错。

解决方案

由于你的子列表满足元素唯一、顺序无关的条件,只需把每个子列表转换成可哈希的类型,就能用set检测重复了,以下是两种可行方法:

方法1:使用frozenset(推荐)

frozenset是不可变的集合类型,天然忽略元素顺序,完全匹配你的需求。将每个子列表转成frozenset后,元素组合相同的子列表会被识别为同一个对象:

unique_binds = set(frozenset(bind) for bind in self.key_bind_list)
if len(self.key_bind_list) != len(unique_binds):
    # 存在重复的按键绑定
    pass
else:
    # 无重复
    pass

方法2:使用排序后的tuple

如果更习惯序列类型的操作,可以先对子列表排序,再转成不可变的tuple。排序后,元素顺序不同但组合相同的子列表会变成完全一致的tuple:

unique_binds = set(tuple(sorted(bind)) for bind in self.key_bind_list)
if len(self.key_bind_list) != len(unique_binds):
    # 存在重复的按键绑定
    pass
else:
    # 无重复
    pass

效果验证

针对你的测试列表[["A", "B"], ["C"], ["SHIFT", "NUM6", "NUM7"], ["A", "B"], ["A", "B", "C"]],两种方法都会精准识别["A", "B"]为重复项,同时判定["A", "B"]与["A", "B", "C"]为不同项,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:05:30