【问题标题】:Python typeError: can't multiply sequence by non-int of type 'float'Python typeError:不能将序列乘以“浮点”类型的非整数
【发布时间】:2015-06-27 10:37:24
【问题描述】:

我有这个代码

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]

【问题讨论】:

标签: python list


【解决方案1】:

错误是您将列表相乘,即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

列表理解是最快的。

【讨论】:

  • 这里有什么方法可以在没有 for 循环的情况下做到这一点吗?有没有办法可以写;一种 ;这样我就可以对整个数组进行操作了?
  • @MarkAisenberg 使用map 或使用numpy。前一个是首选
  • 但是你为什么不想要一个for 循环。这是最好的
  • 使用maplambda不太可能比list comprehension快。
  • @MarkAisenberg:注意如果你这样做a * 2会发生什么:它使列表加倍,而不是它的元素。
【解决方案2】:

您不能对列表进行逐元素操作。

使用列表推导:

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 数组,而不是列表)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-19
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 2011-04-06
    相关资源
    最近更新 更多