为什么内置函数abs()不适用于Python列表,而适用于NumPy数组和pandas系列(因为它将被矢量化)?

为什么内置函数abs()不适用于Python列表,而适用于NumPy数组和pandas系列(因为它将被矢量化)?,python,pandas,numpy,Python,Pandas,Numpy,为什么内置函数abs不能与Python列表一起工作,但可以与NumPy数组和pandas系列一起正常工作 将内置abs函数应用于Python列表会引发一个异常 TypeError:abs的操作数类型错误:“列表” 毫不奇怪,它与文档一致: 阿布克斯 返回数字的绝对值。参数可以是整数或浮点数。 如果参数是复数,则返回其大小 但同一函数的行为与NumPy阵列和熊猫系列的矢量化函数一样正确: In[2]: lst = [2, 0, -1] In[3]: # abs(lst) #

为什么内置函数abs不能与Python列表一起工作,但可以与NumPy数组和pandas系列一起正常工作

将内置abs函数应用于Python列表会引发一个异常

TypeError:abs的操作数类型错误:“列表”

毫不奇怪,它与文档一致:

阿布克斯 返回数字的绝对值。参数可以是整数或浮点数。 如果参数是复数,则返回其大小

但同一函数的行为与NumPy阵列和熊猫系列的矢量化函数一样正确:

In[2]: lst = [2, 0, -1]
In[3]: # abs(lst)             # bad operand type for abs(): 'list'

怎么可能呢?

引用的文档已经过时了

Python 3.8.3的版本声明:

阿布克斯 返回数字的绝对值。参数可以是整数或浮点数。如果参数是复数,则返回其大小。如果x定义了uuu abs,则absx返回x.uuuu abs

最后一句是新的,它解释了这个问题:


NumPy ndarray类和pandas系列类都定义了magic uu abs uu方法。

引用的文档已过时

Python 3.8.3的版本声明:

阿布克斯 返回数字的绝对值。参数可以是整数或浮点数。如果参数是复数,则返回其大小。如果x定义了uuu abs,则absx返回x.uuuu abs

最后一句是新的,它解释了这个问题:


NumPy ndarray类和pandas系列类都定义了magic u abs uu方法。

感谢您指出Python 3.8.3文档。奇怪的是,3.6的文档中省略了_abs____________________________________________。奇怪的是,3.6的文档中省略了_abs_____________________________________。
In[4]: import numpy as np
In[5]: arr = np.array(lst)
In[6]: abs(arr)               # no problem
Out[6]: array([2, 0, 1])
In[7]: import pandas as pd
In[8]: s = pd.Series(lst)
In[9]: abs(s)                 # no problem
Out[9]: 
0    2
1    0
2    1
dtype: int64
In[10]: abs.__class__
Out[10]: builtin_function_or_method