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

ih99xse1  于 2023-02-28  发布在  Python
关注(0)|答案(7)|浏览(107)

我刚开始学习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 "
谢谢

twh00eeo

twh00eeo1#

lst[i]是一个数字列表,而不是数字本身。您不能将数字列表乘以数字,但可以将列表中的元素乘以数字。

fhg3lkii

fhg3lkii2#

你用循环变量i同时索引lstrate--但是一个列表有四个元素,另一个列表有三个元素,你要么错过了一个列表中的元素--要么试图访问另一个列表中不存在的元素。

m4pnthwp

m4pnthwp3#

def multiply(lst, rate):
    lst2 = []
    for litem in lst:
        lst2.append([item + (r * item) for r, item in zip(rate, litem)])
    return lst2
lrpiutwd

lrpiutwd4#

def multiply(lst,rate):
   r = [] # Stores the list the method will return
   for inner_list in lst:
     temp = [] # stores the calculated values
     for amount in inner_list:
        temp.append(amount*(rate[inner_list.index(amount)]+1))
     r.append(temp)
   return r

函数的工作方式如下:
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

b5buobof

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的子列表。

arknldoa

arknldoa6#

在Python中,表达式

list * number

表示连接列表的number个副本...例如

[1, 2, 3] * 3 --> [1, 2, 3, 1, 2, 3, 1, 2, 3]

这个错误消息是因为你试图把一个列表和一个列表相乘。对于numpy数组对象,这个语法支持这个操作(意味着一个元素接一个元素的操作),但是对于常规的Python列表,你需要显式地计算结果。一种方法是使用例如列表解析:

x = [1, 2, 3]
y = [4, 5, 6]
[a*b for a, b in zip(x, y)] --> [4, 10, 18]

要使用列表解析解决问题,代码如下:

[[x+x*y for x, y in zip(L, rate)] for L in lst]

--> [[37.5, 10.199999999999999, 345.0],
     [10.5, 30.600000000000001, 92.0],
     [10.5, 540.60000000000002, 27.600000000000001],
     [97.5, 30.600000000000001, 2.2999999999999998]]

请注意,由于浮点运算固有的不准确性,所以会出现这些长的小数拖尾,并且在其他语言中也会出现这种数据类型(只是其中一些语言在输出时通过舍入来隐藏事实)。

xpcnnkqh

xpcnnkqh7#

您可以使用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]]

说明:x一m0n1x把x一m1n1x变成x一m2n1x;解析创建[item+item*rate, item+item*rate, item+item*rate]的行。

相关问题