如何将列表中嵌套元组的各值平均值存入新列表?
问题与解决方案
问题背景
有一个包含百万级元组的列表,示例如下:
[(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, [avg_of_first, avg_of_second, avg_of_third]]]
- 简化格式(去掉开头的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
相关产品推荐
相关产品推荐

