我刚开始学习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]
我收到一条错误消息:"类型错误:无法将序列乘以'float'类型的非int "
谢谢
7条答案
按热度按时间twh00eeo1#
lst[i]
是一个数字列表,而不是数字本身。您不能将数字列表乘以数字,但可以将列表中的元素乘以数字。fhg3lkii2#
你用循环变量
i
同时索引lst
和rate
--但是一个列表有四个元素,另一个列表有三个元素,你要么错过了一个列表中的元素--要么试图访问另一个列表中不存在的元素。m4pnthwp3#
lrpiutwd4#
函数的工作方式如下:
1.逐步浏览金额列表
1.在每个循环中,它都会重置(创建一个新的临时列表)temp
1.对于列表中的每个金额
1.它将查找该金额的汇率,汇率由索引查找:y = [25,10,300] y[0]是25我们需要将其乘以0.5的比率比率= [0.5,0.02,0.15]比率[0] = 0.5
因为0.5的索引与金额的索引相同,我们可以使用列表的索引方法来获取特定值的索引(或键)。
有关index()方法的信息,请参见http://docs.python.org/tutorial/datastructures.html。
b5buobof5#
您还可以执行以下操作:
map(lambda x: map(lambda y, z: y+y*z, x, rate), lst)
map
将函数应用于列表的每个元素。当使用多个元素调用时,它将函数应用于每个列表中的对应元素(即func(list1[0], list2[0])
和func(list1[1], list2[1])
等等)。内部map
作用于lst
的每个元素。并计算子列表中每个数字的利率,外部map
向内部map
提供lst
的子列表。arknldoa6#
在Python中,表达式
表示连接列表的
number
个副本...例如这个错误消息是因为你试图把一个列表和一个列表相乘。对于
numpy
数组对象,这个语法支持这个操作(意味着一个元素接一个元素的操作),但是对于常规的Python列表,你需要显式地计算结果。一种方法是使用例如列表解析:要使用列表解析解决问题,代码如下:
请注意,由于浮点运算固有的不准确性,所以会出现这些长的小数拖尾,并且在其他语言中也会出现这种数据类型(只是其中一些语言在输出时通过舍入来隐藏事实)。
xpcnnkqh7#
您可以使用numpy来处理这类事情:
如果numpy对你来说是矫枉过正,这可以帮助你:
说明:x一m0n1x把x一m1n1x变成x一m2n1x;解析创建
[item+item*rate, item+item*rate, item+item*rate]
的行。