我尝试按付款方式对不同的python列表进行分组和求和:
我的清单如下:
['Card payment', 'Cash', 'Rounding'][2000.0, 101.05, -0.01]
['Cash'][750.0]
['Cash', 'Cash'][-2578.15, 3333.0]
['Card payment', 'Cash', 'Rounding'][2000.0, 101.05, -0.01]
['Card payment'][313.6]
我想把它们计算成这样的变量:
cash_payment = (total amount of the cash payments)
card_payment = (total amount of the card payments)
rounding = (total amount of rounding)
最好的方法是什么?你知道吗
我有一个版本有多个if/elif的情况下,但必须是一个更好的方式。你知道吗
我的代码是:
if payment_journal_name == card or payment_journal_name == cash:
if payment_journal_name[0] == card and payment_journal_name[1] == cash:
card_payment = payment_journal_amount[0] + card_payment
cash_payment = payment_journal_amount[1] + cash_payment
elif payment_journal_name[0] == cash and payment_journal_name[1] == cash and payment_journal_name[2] == rounding:
cash_payment = pr.amount_total + cash_payment + rounded_total
elif payment_journal_name[0] == cash and payment_journal_name[1] == cash:
cash_payment = pr.amount_total + cash_payment
elif payment_journal_name[0] == card:
card_payment = pr.amount_total + card_payment
elif payment_journal_name[0] == card:
card_payment = pr.amount_total + card_payment
elif payment_journal_name[0] == cash:
cash_payment = pr.amount_total + cash_payment
解决方案
for method, amount in zip(payment_journal_name, payment_journal_amount):
if method == cash:
cash_payment = amount + cash_payment
elif method == card:
card_payment = amount + card_payment
elif method == rounding:
rounding_payment = amount + rounding_payment
如果您试图一次迭代两个列表中的一个项目,我建议使用zip函数(内置):
输出:
如果两个列表的长度相同,这将特别有效。否则,当到达最短列表的最后一项时,循环将停止。
如果列表长度不一样,我建议使用itertools模块(stdlib)中的zip\u longest函数,它将继续循环,直到到达最长列表的末尾。在这种情况下,最短列表中所有缺少的项都将被“无”替换。你知道吗
相关问题 更多 >
编程相关推荐