np.array 与 python 列表的总和:% 不支持的操作数类型:'list' 和 'int'

sum on np.array vs python list: unsupported operand type(s) for %: 'list' and 'int'

我需要对集​​合中的指标函数求和。

sum() 可以直接用在 np.array 上没有问题。

import numpy as np
y = np.arange(10)
ans = sum(y % 2 == 0)

但是,sum() 不能直接用于 python 列表。

z = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ans = sum(z % 2 == 0)

另一方面,这适用于 np.array 和 python 列表。

ans = sum(each % 2 == 0 for each in z)
print(ans)

问题是为什么? np.array 和 python 列表都应该是可迭代的。是什么让 np.array 支持附加语法?

这是因为 Python 列表没有开箱即用,如果你愿意,你总是可以子类化 python 列表并拥有自己的自定义列表以允许通过 [=11 进行模运算=]方法:

class MyList(list):
    def __mod__(self, i):
        return [item%i for item in self]
    
>> data = MyList([1,2,3,4,5,6,7,8,9])
>> data%3

[1, 2, 0, 1, 2, 0, 1, 2, 0]

你可以看看官方Python documentation了解可以覆盖的方法