gspread嵌套列表处理:指定列求和并追加至行的问题
问题解决:计算谷歌表格数据列总和并追加到指定行
原数据结构
从谷歌表格获取的嵌套列表如下:
[['Date', 'Description', 'Income', 'Expense', 'Currency', 'Exchange Rate', 'Bank account', 'Converted amount', 'Converted currency', 'Total expenses £', 'Total expenses €'], ['2024-06-06', 'Gardener', '', '500', '£', '1.191', 'bank name', 595.5, '€'], ['2024-07-15', 'Keys cut', '', '16', '£', '1.1902', 'bank name', 19.0432, '€'], ['2024-07-15', 'Skip hire', '', '300', '£', '1.1902', 'bank name', 357.06, '€']]
需求
- 将
Expense列的字符串值('500'、'16'、'300')转为浮点数后求和 - 将
Converted amount列的浮点数值(595.5、19.0432、357.06)求和 - 把这两个总和追加到列表的第二行(即索引为1的行)
原代码问题分析
你写的代码存在两个核心问题:
- 每次循环都重新初始化
total_gbp和total_eur为空列表,导致每次只能存储当前行的单个值,无法累加所有行的数据 - 每次循环都往第二行追加当前行的计算值,最终第二行会被追加多个单个值,而不是最终的总和
原错误代码:
for row in list_of_lists[1:]: total_gbp = [] expense_gbp = float(row[3]) total_gbp.append(expense_gbp) list_of_lists[1].append(sum(total_gbp)) total_eur = [] expense_eur = row[7] total_eur.append(expense_eur) list_of_lists[1].append(sum(total_eur))
正确实现代码
先初始化两个总和变量,循环遍历所有数据行进行累加,最后一次性将总和追加到第二行:
# 初始化总和变量 total_gbp = 0.0 total_eur = 0.0 # 遍历所有数据行(跳过表头行) for row in list_of_lists[1:]: # 累加Expense列的数值(转浮点数) total_gbp += float(row[3]) # 累加Converted amount列的数值 total_eur += row[7] # 将两个总和追加到第二行(索引1的行) list_of_lists[1].extend([total_gbp, total_eur])
执行后,第二行的末尾会追加816.0(500+16+300)和971.6032(595.5+19.0432+357.06)两个总和值,符合需求。
内容的提问来源于stack exchange,提问作者gp12
相关产品推荐
相关产品推荐

