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

对比两个列表元素并计算中位数时遇'int不可迭代'错误求助

问题描述

我有一个关键词列表:

list1 = ['key(1)', 'key(2)', ..., 'key(x)']

还有一个二维列表:

list2 = [
    ['key1','str(11)','value(11)'],
    ['key1','str(12)','value(12)'],
    ...,
    ['key(1)','str(1n)','value(1n)'],
    ['key2','str(21)','value(21)'],
    ...,
    ['key(n)','str(nn)','value(nn)']
]

需求是:为list1中每个存在于list2里的关键词,计算其对应所有value的中位数,最终输出格式如下:

output_list=[
    ['key(1)', median(value(11),...value(1n))],
    ['key(2)', median(value(21),...value(2n))],
    ...,
    ['key(x)', median(value(x1),...value(xn))]
]

我尝试用以下代码实现:

import statistics
for i in range(0,len(list1)):
    for j in range (0,len(list2)):
        if list1[i] in list2[j]:
            print(list1[i],statistics.median(int(list2[j][2])))

但运行时出现int object is not iterable错误,需要解决。

错误原因

statistics.median()函数要求参数是可迭代的数值集合(比如列表、元组),但你的代码每次只将单个value转成整数后传入,相当于给函数传了一个单独的int值,不符合参数要求,因此触发“int不可迭代”的错误。另外,你的逻辑是找到一个匹配的key就计算一次中位数,这也不符合需求——应该先收集同一个key对应的所有value,再统一计算中位数。

解决代码

以下是修正后的实现,先收集每个key对应的所有value,再计算中位数:

import statistics

# 示例输入,可替换为实际数据
list1 = ['key(1)', 'key(2)']
list2 = [
    ['key(1)', 'str(11)', '10'],
    ['key(1)', 'str(12)', '20'],
    ['key(1)', 'str(13)', '30'],
    ['key(2)', 'str(21)', '5'],
    ['key(2)', 'str(22)', '15']
]

output_list = []
for key in list1:
    values = []
    for item in list2:
        # 精准匹配子列表的第一个元素(key列),避免误判
        if item[0] == key:
            # 将value转为整数并加入收集列表
            values.append(int(item[2]))
    # 确保有值时再计算中位数,避免空列表报错
    if values:
        median_val = statistics.median(values)
        output_list.append([key, median_val])

print(output_list)
代码说明
  • 遍历list1中的每个关键词,为每个key初始化空列表values,用于收集对应的所有数值
  • 遍历list2时,精准匹配子列表的第一个元素(key字段),避免因其他位置出现相同字符串导致的误匹配
  • 收集完当前key的所有value后,判断values不为空再计算中位数,防止空列表传入median()引发新错误
  • 最后将[key, 中位数]的子列表加入output_list,符合需求的输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:01:15