我需要对集合中的一个指标函数求和。
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官方文档,了解可以覆盖的方法。