你好,今晚愉快。
我正在学习Python,感觉很有趣。
假设我有一个Python数组:
x = [1, 0, 0, 1, 3]
如何最快地计算列表中所有非零元素的数量(答案:3)?如果可能,我希望以最简洁明了的方式完成,不使用for循环,概念上类似于:
[counter += 1 for y in x if y > 0]
现在 - 我真正的问题是我有一个多维数组,我真正想避免的是做以下操作:
for p in range(BINS):
for q in range(BINS):
for r in range(BINS):
if (mat3D[p][q][r] > 0): some_feature_set_count += 1
从我所见的少量Python代码来看,我的直觉是有一种非常简洁(且高效)的语法方式可以实现这一点。
有什么想法吗?
xrange
而不是range
)。此外,我个人认为,尽管你的代码更长、不太符合 Python 风格,但比任何语法技巧都更清晰易懂。 - salezicaTrue == 1
),那就是sum(bool(i) for i in x)
...但它对于使用其他谓词进行计数更有用,比如i>0
。 - Jochen Ritzel