NP.ARRAY 与 Python 列表的总和:%:'list' 和 '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列表子类化,并拥有自己的自定义列表,以允许通过__mod__方法进行模运算:

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官方文档,了解可以覆盖的方法。

最新更新