添加列表和NumPy号码

时间:2015-10-15 14:22:44

标签: python list numpy

如果向列表中添加一个整数,则会出现列表的__add__函数引发的错误(我想):

>>> [1,2,3] + 3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list

如果你向NumPy数组添加一个列表,我假设NumPy数组的__add__函数将列表转换为NumPy数组并添加列表

>>> np.array([3]) + [1,2,3]
array([4, 5, 6])

但是下面会发生什么?

>>> [1,2,3] + np.array([3])
array([4, 5, 6])

列表如何知道如何使用NumPy数组处理添加?

2 个答案:

答案 0 :(得分:12)

list不知道如何使用NumPy数组处理添加。即使在[1,2,3] + np.array([3]),也是处理添加的NumPy数组。

作为documented in the data model

  
      
  • 对于对象x和y,首先尝试x.__op__(y)。如果未实现或返回NotImplemented,则尝试y.__rop__(x)。如果   这也没有实现或返回NotImplemented,一个TypeError   提出异常。但请参阅以下例外:

  •   
  • 前一项的异常:如果左操作数是内置类型或新样式类的实例,并且右操作数是   该类型或类的正确子类的实例并覆盖   base的__rop__()方法,右操作数的__rop__()方法是   在左操作数的__op__()方法之前尝试过。

  •   

当你这样做时

[1,2,3] + np.array([3])

内部称为

np.array([3]).__radd__([1,2,3])

答案 1 :(得分:8)

由于np.array的var result = input.replace(/(^|>)([^<]*)(<|$)/g, function(_,a,b,c){ return a + b.replace(/b/g, ':blablabla:') // you may do something else here + c; }); 方法,请查看此链接:http://www.rafekettler.com/magicmethods.html#numeric(段落反射算术运算符)。

事实上,当您尝试__radd__时,会引发错误,因此会调用[1,2,3].__add__(np.array([3]))