Python组与计算

2024-04-25 16:40:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试按付款方式对不同的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

Tags: andnameifcashprpaymentcardamount
1条回答
网友
1楼 · 发布于 2024-04-25 16:40:56

如果您试图一次迭代两个列表中的一个项目,我建议使用zip函数(内置):

l1 = ['Card payment', 'Cash', 'Rounding']
l2 = [2000.0, 101.05, -0.01]

for method, amount in zip(l1, l2):
    print(f'{method}: {amount}')

输出:

Card payment: 2000.0
Cash: 101.05
Rounding: -0.01

如果两个列表的长度相同,这将特别有效。否则,当到达最短列表的最后一项时,循环将停止。
如果列表长度不一样,我建议使用itertools模块(stdlib)中的zip\u longest函数,它将继续循环,直到到达最长列表的末尾。在这种情况下,最短列表中所有缺少的项都将被“无”替换。你知道吗

相关问题 更多 >