# generator expression (lazy)gen = (x**2 for x in range(5))#ans: <generator object>list(gen)#ans: [0, 1, 4, 9, 16]
# list - all in memorylst = [x**2 for x in range(1000)]#ans: generator - on demandgen = (x**2 for x in range(1000))
# iterate oncegen = (x for x in range(3))for val in gen: print(val)#ans: 0, 1, 2#ans: exhausted after iterationfor val in gen: print(val)#ans: (nothing)
# use in sumsum(x**2 for x in range(10))#ans: 285#ans: use in maxmax(x for x in range(10) if x % 2 == 0)#ans: 8
# filter with generatorgen = (x for x in range(10) if x % 2 == 0)list(gen)#ans: [0, 2, 4, 6, 8]
# generator type?gen = (x for x in range(3))type(gen)#ans: <class 'generator'>
# can iterate twice?gen = (x for x in range(3))list(gen)#ans: [0, 1, 2]list(gen)#ans: [] (exhausted)
# memory efficiency?import syslst = [x for x in range(1000)]gen = (x for x in range(1000))sys.getsizeof(lst)#ans: ~9000 bytessys.getsizeof(gen)#ans: ~200 bytes
# next() on generator?gen = (x for x in range(3))next(gen)#ans: 0next(gen)#ans: 1
# generator with if-else?gen = (x if x > 0 else 0 for x in [-1, 1, 2])list(gen)#ans: [0, 1, 2]
# chaining generators?gen1 = (x for x in range(5))gen2 = (x*2 for x in gen1)list(gen2)#ans: [0, 2, 4, 6, 8]
# generator in sum?sum(x for x in range(101))#ans: 5050
# empty generator?gen = (x for x in [])list(gen)#ans: []
# generator vs range?#ans: both are lazyrange(10) # range object(x for x in range(10)) # generator
# convert to list?gen = (x**2 for x in range(3))lst = list(gen)#ans: [0, 1, 4]#ans: gen is now exhausted
Google tag (gtag.js)