也包含字符串的列表列表中某些元素的总和

问题描述 投票:0回答:3

我正在使用使用 gspread 在 google 电子表格上输入的值构建一个列表列表。然后,最终的列表列表将使用

worksheet.update()

填充工作表

名单如下:

[['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, '€']]

我想对“费用”列下的所有字符串求和,即“500”、“16”和“300”。我还想对“转换金额”列下的浮点数求和,即 595.5、19.0432 和 357.06。然后我想将这些总和附加到列表列表的第二行。

我尝试过的:

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))

如果我

print(list_of_lists)
,我得到:

[['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, '€', 500.0, 595.5, 16.0, 19.0432, 300.0, 357.06],
['2024-07-15', 'Keys cut', '', '16', '£', '1.1902', 'bank name', 19.0432, '€'],
['2024-07-15', 'Skip hire', '', '300', '£', '1.1902', 'bank name', 357.06, '€']]

所以它是附加元素而不是总和

在 for 循环输出中插入

print(total_gbp)

[500]
[16]
[300]

我不明白为什么它不是如下列表:

[500, 16, 300]
python python-3.x gspread
3个回答
0
投票

你的意思是这样的吗:

total_gbp = 0
total_eur = 0

for row in list_of_lists[1:]:
        total_gbp += float(row[3])
        total_eur += float(row[7])

list_of_lists[1].append(total_gbp)
list_of_lists[1].append(total_eur)

输出:

['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, '€', 816.0, 971.6032]
['2024-07-15', 'Keys cut', '', '16', '£', '1.1902', 'bank name', 19.0432, '€']
['2024-07-15', 'Skip hire', '', '300', '£', '1.1902', 'bank name', 357.06, '€']

0
投票

您在每个循环中重新声明

total_gbp
total_eur
。相反,您应该更改
total_gbp
total_eur
的范围。

total_gbp = []
total_eur = []
for row in list_of_lists[1:]:
    expense_gbp = float(row[3])
    total_gbp.append(expense_gbp)  
    expense_eur = row[7]
    total_eur.append(expense_eur)
list_of_lists[1].append(sum(total_gbp))
list_of_lists[1].append(sum(total_eur))

0
投票

您是否有任何理由不考虑使用 pandas 而不是尝试推理列表列表和混合类型?

如果将电子表格转换为 pandas 数据框,则可以轻松推理列和列类型,并对它们求和。如果你有大的列,这会更容易,也更高效。

https://docs.gspread.org/en/v6.0.0/user-guide.html#using-gspread-with-pandas

© www.soinside.com 2019 - 2024. All rights reserved.