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

如何在列表中选择指定元素求交集?解决unhashable type: 'list'错误

冰球比赛数据列表求交集问题

需求说明

需要对两个存储冰球比赛数据的列表求交集,仅针对比赛信息维度(即hockeymatch对应的内容,比如('Seattle-Minnesota', 'NHL', '18:00'))进行运算,输出共同的比赛信息,同时需排除:

  • 同一比赛行中不同的数值(如[1.33]、[62.0]这类与其他列表中对应数值不同的内容)
  • 非共同的比赛信息(如'Dallas-Arizona', 'NHL', '15:00'这类仅在单个列表中存在的比赛)

核心要求:

  • 未来新增比赛时能自动识别所有共同比赛,无需手动指定
  • 能明确区分每行数据中的hockeymatch、number1、number2字段

报错信息

运行现有代码时触发如下错误:

TypeError: unhashable type: 'list'

期望输出

('Seattle-Minnesota', 'NHL', '18:00')

现有代码示例

#x = []
#x.append([[hockeymatch], [number1], [number2]])
x = [[[('Dallas-Arizona', 'NHL', '15:00')], [1.75], [87.5]],
     [('Seattle-Minnesota', 'NHL', '18:00')], [2.5], [125.0]]

#y = []
#y.append([[hockeymatch], [number1], [number2]])
y = [[[('Seattle-Minnesota', 'NHL', '18:00')], [1.33], [62.0]],
       [('Vancouver-Vegas', 'NHL', '20:00')], [0.50], [43.0]]

test = list(set(x[0]).intersection(y[0]))
print(test)

问题分析与解决方法

问题根源

  1. 报错原因:set()要求元素为可哈希类型,但列表(list)是不可哈希的,直接将x[0]、y[0]放入集合会触发错误。
  2. 数据结构混乱:现有x、y的格式不统一,部分元素是嵌套列表,部分是单层结构,无法批量处理比赛数据。

修正方案

步骤1:统一数据结构

将每场比赛的信息封装为统一格式的子列表:[hockeymatch, number1, number2],其中hockeymatch用元组(可哈希类型)存储:

# 统一结构:每个子列表对应一场比赛,格式为 [比赛信息元组, 数值1, 数值2]
x = [
    [('Dallas-Arizona', 'NHL', '15:00'), 1.75, 87.5],
    [('Seattle-Minnesota', 'NHL', '18:00'), 2.5, 125.0]
]

y = [
    [('Seattle-Minnesota', 'NHL', '18:00'), 1.33, 62.0],
    [('Vancouver-Vegas', 'NHL', '20:00'), 0.50, 43.0]
]

步骤2:提取比赛信息并求交集

用集合推导式提取所有比赛信息,通过集合运算快速求交集:

# 提取x中所有比赛信息
x_matches = {match[0] for match in x}
# 提取y中所有比赛信息
y_matches = {match[0] for match in y}
# 计算交集
common_matches = x_matches & y_matches
# 输出结果
for match in common_matches:
    print(match)

方案优势

  • 元组可哈希,解决了unhashable type的报错问题
  • 统一的数据结构支持自动识别新增比赛,无需修改核心逻辑
  • 集合运算高效,能快速处理大量比赛数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:20:26