通过添加利率更新列表[Python]
我刚开始学习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
同时访问 lst
和 rate
这两个列表,但一个列表有四个元素,另一个列表只有三个元素。这就意味着你要么会漏掉一个列表中的某个元素,要么会尝试访问另一个列表中不存在的元素。
3
lst[i]
是一个数字列表,而不是单个数字。你不能直接把一个数字列表和一个数字相乘,但你可以把列表里的每个数字都和那个数字相乘。