在Python中使用for在列表中追加float

在Python中使用for在列表中追加float,python,list,append,Python,List,Append,我试图构建一个函数,将每个向量的iten相乘,然后返回一个带有这些数字的向量,但是我在附加乘法时遇到了问题 例如: -输入: vec1 = np.array([-2.0, -1.0, 0.0, 1.0, 2.0]) vec2 = np.array([-16.2, 87.8, -7.199999999999999, -52.2, -12.2]) list_mult(vec1,vec2) -输出: [ 32.4 -87.8 -0. -52.2 -24.4] -以下是我的代码和输出错误:

我试图构建一个函数,将每个向量的iten相乘,然后返回一个带有这些数字的向量,但是我在附加乘法时遇到了问题

例如:

-输入:

vec1 = np.array([-2.0, -1.0, 0.0, 1.0, 2.0])

vec2 = np.array([-16.2, 87.8, -7.199999999999999, -52.2, -12.2])

list_mult(vec1,vec2)
-输出:

[ 32.4 -87.8  -0.  -52.2 -24.4]
-以下是我的代码和输出错误:

import numpy as np

def list_mult(v1,v2):
    result = list()
    for i in v1: 
        for j in v2:
            result.append(v1[i] * v2[j])
    return result
输出:

      4     for i in v1:
      5         for j in v2:
----> 6             result.append(v1[i] * v2[j])
      7     return result

TypeError: list indices must be integers or slices, not numpy.float64
```

您正在迭代元素,但在访问时,您正在将元素作为索引传递。所以你得到了错误

更改以下行

 In [38]: import numpy as np
    ...:
    ...: def list_mult(v1,v2):
    ...:     result = list()
    ...:     for idx1,i in enumerate(v1):
    ...:         for idx2,j in enumerate(v2):
    ...:             if (idx1 == idx2):
    ...:                 result.append(i * j)
    ...:     return result
    ...:
    ...:

In [39]: list_mult(vec1,vec2)
Out[39]: [32.4, -87.8, -0.0, -52.2, -24.4]
更优雅的解决方案是使用numpy包的
np.multiply
函数

In [37]: np.multiply(vec1,vec2)
Out[37]: array([ 32.4, -87.8,  -0. , -52.2, -24.4])

这里的
i
j
v1[i]
,我的意思是
i
j
不是索引,而是它们本身的数字(-16.2,87.8,-7.19999999999999999,-52.2,-12.2),所以你需要
结果。只附加(i*j)
np乘法(vec1,vec2)
[i*j在v1中表示i在v2中表示j在v2中表示j]
你使用的是numpy,它具有内置的功能。您可以简单地执行
vec1*vec2
,这将执行元素乘法。最初犯了同样的错误,嵌套循环将生成16个值,而不是像OP所需的4个值:)当我使用第一个循环时,它将返回以下列表:[32.4, -175.6, 14.399999999999999, 104.4, 24.4, 16.2, -87.8, 7.199999999999999, 52.2, 12.2, -0.0, 0.0, -0.0, -0.0, -0.0, -16.2, 87.8, -7.199999999999999, -52.2, -12.2, -32.4, 175.6, -14.399999999999999, -104.4, -24.4]因为它是两个列表的叉积。更新了答案,但建议使用numpy软件包的多功能,因为它更优化。