Python typeError:不能将序列乘以'float'类型的非int

时间:2015-04-20 15:42:28

标签: python list

我有这段代码

a = [0.0, 1.1, 2.2]
b = a * 2.0

这就是我收到错误的地方

typeError: can't multiply sequence by non-int of type 'float'

我希望它return

b = [0.0, 2.2, 4.4]

2 个答案:

答案 0 :(得分:5)

错误在于您将列表a与浮点数相乘,即2.0

改为执行此操作(列表理解)

b = [i*2.0 for i in a]

小型演示

>>> a = [0.0, 1.1, 2.2]
>>> b = [i*2.0 for i in a]
>>> b
[0.0, 2.2, 4.4]

使用map

map(lambda x:x*2.0 , a)

以下是timeit结果

bhargav@bhargav:~$ python -m timeit "a = [0.0, 1.1, 2.2]; b = [i*2.0 for i in a]"
1000000 loops, best of 3: 0.34 usec per loop
bhargav@bhargav:~$ python -m timeit "a = [0.0, 1.1, 2.2]; b = map(lambda x:x*2.0 , a)"
1000000 loops, best of 3: 0.686 usec per loop
bhargav@bhargav:~$ python -m timeit "import numpy; a = numpy.array([0.0, 1.1, 2.2]); b = a * 2.0"
10 loops, best of 3: 5.51 usec per loop

列表理解是最快的。

答案 1 :(得分:3)

您无法对列表进行按元素操作。

使用列表推导:

a = [0.0, 1.1, 2.2]
b = [2 * i for i in a]

使用numpy(大型列表更快):

import numpy as np

a = np.array([0.0, 1.1, 2.2])
b = a * 2.0

(然后你得到一个numpy数组,而不是列表)