通过添加利率更新列表[Python]

2 投票
7 回答
614 浏览
提问于 2025-04-17 06:12

我刚开始学习Python,现在在写一个特定的函数时遇到了问题。这个函数的主要功能是通过添加利率来更新一个列表。

lst = [[25, 10, 300], [7, 30, 80], [7, 530, 24],[65, 30, 2]]
rate = [0.5, 0.02, 0.15]

输出结果:

[37.5, 10.2, 345.0]
[10.5, 30.6, 92.0]
[10.5, 540.6, 27.6]
[97.5, 30.6, 2.3]

这是我目前写的代码:

def multiply(lst, rate):
    for i in range(len(lst)):
        lst[i] += rate[i] * lst[i]

我收到了一个错误信息: "TypeError: can't multiply sequence by non-int of type 'float'"

谢谢!

7 个回答

0

你可以使用 numpy 来处理这类问题:

>>> import numpy as np
>>> lst = np.array([[25, 10, 300], [7, 30, 80], [7, 530, 24],[65, 30, 2]])
>>> rate = [0.5, 0.02, 0.15]
>>> lst + lst*rate
array([[  37.5,   10.2,  345. ],
       [  10.5,   30.6,   92. ],
       [  10.5,  540.6,   27.6],
       [  97.5,   30.6,    2.3]])

如果觉得使用numpy太复杂了,这个方法可能对你有帮助:

>>> lst = [[25, 10, 300], [7, 30, 80], [7, 530, 24],[65, 30, 2]]
>>> rate = [0.5, 0.02, 0.15]
>>> [[x+x*y for x,y in zip(row, rate)] for row in lst]
[[37.5, 10.2, 345.0], [10.5, 30.6, 92.0], [10.5, 540.6, 27.6], [97.5, 30.6, 2.3]]

解释一下:zip(row, rate) 会把 [rate, rate, rate], [item, item, item] 变成 [(item, rate), (item, rate), (item, rate)];而这个理解式会生成 [item+item*rate, item+item*rate, item+item*rate] 这样的行。

1

你在用循环变量 i 同时访问 lstrate 这两个列表,但一个列表有四个元素,另一个列表只有三个元素。这就意味着你要么会漏掉一个列表中的某个元素,要么会尝试访问另一个列表中不存在的元素。

3

lst[i] 是一个数字列表,而不是单个数字。你不能直接把一个数字列表和一个数字相乘,但你可以把列表里的每个数字都和那个数字相乘。

撰写回答