Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Interview question

What is the difference between a generator expression and a list comprehension? Generator expression और list comprehension में क्या अंतर है?

Answer
AspectList comprehensionGenerator expression
Syntax[x for x in ...](x for x in ...)
EvaluationEager - computes all values immediatelyLazy - computes values on demand
MemoryStores entire result in memoryMinimal memory - one value at a time
ReusabilityCan be iterated multiple timesSingle-use, exhausted after one pass
import sys

# List comprehension - all values computed and stored immediately
list_comp = [x**2 for x in range(1000000)]
print(sys.getsizeof(list_comp))  # large - ~8MB+ for a million ints

# Generator expression - values computed lazily, one at a time
gen_exp = (x**2 for x in range(1000000))
print(sys.getsizeof(gen_exp))  # tiny - ~200 bytes regardless of range size

# Both can be iterated the same way
for val in gen_exp:
    if val > 20:
        break
    print(val)

# Generators are exhausted after one full iteration
gen = (x for x in range(3))
print(list(gen))  # [0, 1, 2]
print(list(gen))  # [] - already exhausted, second call gets nothing

# Lists can be iterated repeatedly
lst = [x for x in range(3)]
print(list(lst))  # [0, 1, 2]
print(list(lst))  # [0, 1, 2] - works again

# When to use which: generator expressions for large/streaming data
# processed once; list comprehensions when you need random access,
# multiple iterations, or len()
total = sum(x**2 for x in range(1000000))  # generator, memory-efficient sum
पहलूList comprehensionGenerator expression
Syntax[x for x in ...](x for x in ...)
EvaluationEager - सारी values तुरंतLazy - demand पर
Memoryपूरा result memory मेंबहुत कम memory
Reusabilityकई बार iterate हो सकता हैएक बार use, फिर exhaust
import sys

list_comp = [x**2 for x in range(1000000)]
print(sys.getsizeof(list_comp))  # बड़ा size

gen_exp = (x**2 for x in range(1000000))
print(sys.getsizeof(gen_exp))  # बहुत छोटा size

for val in gen_exp:
    if val > 20:
        break
    print(val)

# Generator एक बार पूरा iterate होने पर exhaust हो जाता है
gen = (x for x in range(3))
print(list(gen))  # [0, 1, 2]
print(list(gen))  # [] - exhausted

# Lists बार-बार iterate हो सकती हैं
lst = [x for x in range(3)]
print(list(lst))  # [0, 1, 2]
print(list(lst))  # [0, 1, 2] - फिर काम करता है

total = sum(x**2 for x in range(1000000))  # memory-efficient sum

Was this answer clear?