from timeit import timeit
from itertools import chain, filterfalse
import functools
m = ((2,0,2,2),(4,4,5,4),(0,9,4,8),(2,2,0,0))
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 filterfalse(bool, chain(*m)):
total += 1
return total
def zeroCountuser2931409():
# `reduce` is in `functools` in Py3k
return functools.reduce(lambda a, b: a + b, m).count(0)
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))
ZnJvbSB0aW1laXQgaW1wb3J0IHRpbWVpdApmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4sIGZpbHRlcmZhbHNlCmltcG9ydCBmdW5jdG9vbHMKCm0gPSAoKDIsMCwyLDIpLCg0LDQsNSw0KSwoMCw5LDQsOCksKDIsMiwwLDApKQoKZGVmIHplcm9Db3VudE9QKCk6CiAgICByZXR1cm4gW2l0ZW0gZm9yIHJvdyBpbiBtIGZvciBpdGVtIGluIHJvd10uY291bnQoMCkKCmRlZiB6ZXJvQ291bnRURkUoKToKICAgIHJldHVybiBsZW4oW2l0ZW0gZm9yIHJvdyBpbiBtIGZvciBpdGVtIGluIHJvdyBpZiBpdGVtID09IDBdKQoKZGVmIHplcm9Db3VudEpGUygpOgogICAgcmV0dXJuIHN1bShyb3cuY291bnQoMCkgZm9yIHJvdyBpbiBtKQoKZGVmIHplcm9Db3VudCgpOgogICAgdG90YWwgPSAwCiAgICBmb3IgeCBpbiBmaWx0ZXJmYWxzZShib29sLCBjaGFpbigqbSkpOiAKICAgICAgICB0b3RhbCArPSAxCiAgICByZXR1cm4gdG90YWwKZGVmIHplcm9Db3VudHVzZXIyOTMxNDA5KCk6CiAgICAjIGByZWR1Y2VgIGlzIGluIGBmdW5jdG9vbHNgIGluIFB5M2sKICAgIHJldHVybiBmdW5jdG9vbHMucmVkdWNlKGxhbWJkYSBhLCBiOiBhICsgYiwgbSkuY291bnQoMCkKCnByaW50KCdPcmlnaW5hbCBjb2RlICAgICAnLCB0aW1laXQoemVyb0NvdW50T1AsIG51bWJlcj0xMDAwMDApKQpwcmludCgnQEouRi5TZWJhc3RpYW4gICAgJywgdGltZWl0KHplcm9Db3VudEpGUywgbnVtYmVyPTEwMDAwMCkpCnByaW50KCdAdGhlZm91cnRoZXllICAgICAnLCB0aW1laXQoemVyb0NvdW50VEZFLCBudW1iZXI9MTAwMDAwKSkKcHJpbnQoJ0B1c2VyMjkzMTQwOSAgICAgICcsIHRpbWVpdCh6ZXJvQ291bnR1c2VyMjkzMTQwOSwgbnVtYmVyPTEwMDAwMCkpCnByaW50KCdAZnJvc3RuYXRpb25hbCAgICAnLCB0aW1laXQoemVyb0NvdW50LCBudW1iZXI9MTAwMDAwKSk=