from timeit import timeit
from itertools import chain, ifilterfalse
import numpy as np
m = ((2,0,2,2),(4,4,5,4),(0,9,4,8),(2,2,0,0))
mm = np.array(m)
def zeroCountOP():
return [item for row in m for item in row].count(0)
def zeroCountTFE():
return len([item for row in m for item in row if item == 0])
def zeroCountJFS():
return sum(row.count(0) for row in m)
def zeroCount():
total = 0
for x in ifilterfalse(bool, chain(*m)):
total += 1
return total
def zeroCountuser2931409():
# `reduce` is in `functools` in Py3k
return reduce(lambda a, b: a + b, m).count(0)
def zeroCountsmci():
return (mm==0).sum()
print('Original code ', timeit(zeroCountOP, number=100000))
print('@J.F.Sebastian ', timeit(zeroCountJFS, number=100000))
print('@thefourtheye ', timeit(zeroCountTFE, number=100000))
print('@user2931409 ', timeit(zeroCountuser2931409, number=100000))
print('@frostnational ', timeit(zeroCount, number=100000))
print('@smci ', timeit(zeroCountsmci, number=100000))
ZnJvbSB0aW1laXQgaW1wb3J0IHRpbWVpdApmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4sIGlmaWx0ZXJmYWxzZQppbXBvcnQgbnVtcHkgYXMgbnAKCm0gPSAoKDIsMCwyLDIpLCg0LDQsNSw0KSwoMCw5LDQsOCksKDIsMiwwLDApKQptbSA9IG5wLmFycmF5KG0pCgpkZWYgemVyb0NvdW50T1AoKToKICAgIHJldHVybiBbaXRlbSBmb3Igcm93IGluIG0gZm9yIGl0ZW0gaW4gcm93XS5jb3VudCgwKQoKZGVmIHplcm9Db3VudFRGRSgpOgogICAgcmV0dXJuIGxlbihbaXRlbSBmb3Igcm93IGluIG0gZm9yIGl0ZW0gaW4gcm93IGlmIGl0ZW0gPT0gMF0pCgpkZWYgemVyb0NvdW50SkZTKCk6CiAgICByZXR1cm4gc3VtKHJvdy5jb3VudCgwKSBmb3Igcm93IGluIG0pCgpkZWYgemVyb0NvdW50KCk6CiAgICB0b3RhbCA9IDAKICAgIGZvciB4IGluIGlmaWx0ZXJmYWxzZShib29sLCBjaGFpbigqbSkpOiAKICAgICAgICB0b3RhbCArPSAxCiAgICByZXR1cm4gdG90YWwKICAgIApkZWYgemVyb0NvdW50dXNlcjI5MzE0MDkoKToKICAgICMgYHJlZHVjZWAgaXMgaW4gYGZ1bmN0b29sc2AgaW4gUHkzawogICAgcmV0dXJuIHJlZHVjZShsYW1iZGEgYSwgYjogYSArIGIsIG0pLmNvdW50KDApCgpkZWYgemVyb0NvdW50c21jaSgpOgogICAgcmV0dXJuIChtbT09MCkuc3VtKCkKCnByaW50KCdPcmlnaW5hbCBjb2RlICAgICAnLCB0aW1laXQoemVyb0NvdW50T1AsIG51bWJlcj0xMDAwMDApKQpwcmludCgnQEouRi5TZWJhc3RpYW4gICAgJywgdGltZWl0KHplcm9Db3VudEpGUywgbnVtYmVyPTEwMDAwMCkpCnByaW50KCdAdGhlZm91cnRoZXllICAgICAnLCB0aW1laXQoemVyb0NvdW50VEZFLCBudW1iZXI9MTAwMDAwKSkKcHJpbnQoJ0B1c2VyMjkzMTQwOSAgICAgICcsIHRpbWVpdCh6ZXJvQ291bnR1c2VyMjkzMTQwOSwgbnVtYmVyPTEwMDAwMCkpCnByaW50KCdAZnJvc3RuYXRpb25hbCAgICAnLCB0aW1laXQoemVyb0NvdW50LCBudW1iZXI9MTAwMDAwKSkKcHJpbnQoJ0BzbWNpICAgICAgICAgICAgICcsIHRpbWVpdCh6ZXJvQ291bnRzbWNpLCBudW1iZXI9MTAwMDAwKSk=