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

如何将列表中嵌套元组的各值平均值存入新列表?

问题与解决方案

问题背景

有一个包含百万级元组的列表,示例如下:

[(1, (226, 242, 195)), (1, (218, 236, 188)), (1, (219, 235, 188)), (1, (220, 236, 187)), (1, (217, 235, 187)), (1, (216, 232, 185)), (1, (216, 234, 184))]

需求是计算嵌套元组中每个位置值的平均值,输出两种格式:

  1. 保留开头标识的格式:
[[1, [avg_of_first, avg_of_second, avg_of_third]]]
  1. 简化格式(去掉开头的1):
[avg_of_first, avg_of_second, avg_of_third]

遇到的常见报错:

TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
翻译:类型错误:不支持对'int'和'tuple'类型执行加法操作

报错原因

该错误是由于代码中尝试将整数(如元组第一个元素1)与嵌套元组直接执行加法操作导致的,比如错误编写total += item[0] + item[1]这类代码,造成类型不兼容。

解决方案

方法一:纯Python高效循环(适配百万级数据)

仅遍历一次列表完成累加,内存占用低,适合大规模数据集:

生成简化格式结果

sum_r = sum_g = sum_b = 0
count = 0

for idx, rgb_tuple in data_list:
    r, g, b = rgb_tuple
    sum_r += r
    sum_g += g
    sum_b += b
    count += 1

avg_result = [round(sum_r/count, 2), round(sum_g/count, 2), round(sum_b/count, 2)]
print(avg_result)

示例输出:[218.86, 235.71, 187.71]

生成带开头标识的格式结果

基于简化结果包装即可:

full_result = [[1, avg_result]]
print(full_result)

示例输出:[[1, [218.86, 235.71, 187.71]]]

方法二:使用numpy(简洁高效的数值计算)

若环境已安装numpy,处理大规模数值数据更便捷:

import numpy as np

# 提取所有嵌套元组并转为numpy数组
rgb_array = np.array([rgb for _, rgb in data_list])
# 按列计算平均值并转为列表
avg_np = np.mean(rgb_array, axis=0).tolist()

# 简化格式输出
print(avg_np)
# 带开头标识的格式输出
print([[1, avg_np]])

示例输出:[218.85714285714286, 235.71428571428572, 187.71428571428572]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:20:43