Data Structures

List Comprehensions

One-Line Loops
💡 List comprehension ek fast-food order jaisa hai — poora recipe (loop) likhne ke bajaye, ek line mein bata do "ye chahiye, is filter ke saath", aur poori list turant ban jaati hai.

List comprehension ek concise, Pythonic tareeka hai naya list banane ka — traditional for loop + append() pattern ko ek line mein compress kar deta hai. Syntax: [expression for item in iterable if condition].

Zyada readable AND usually faster (Python internally optimize karta hai) traditional loops se — Python developers ke beech bahut popular pattern hai, "Pythonic" code ka signature feature.

# Traditional loop:
squares = []
for x in range(10):
    squares.append(x ** 2)

# List comprehension — same result, ek line:
squares = [x ** 2 for x in range(10)]

# Condition ke saath (filter):
evens = [x for x in range(20) if x % 2 == 0]
print(evens)   # [0, 2, 4, ..., 18]

# Nested loop bhi possible hai:
pairs = [(x, y) for x in range(3) for y in range(2)]
print(pairs)   # [(0,0), (0,1), (1,0), (1,1), (2,0), (2,1)]
List comprehension ek fast-food order jaisa hai — poora recipe (loop) likhne ke bajaye, ek line mein bata do "ye chahiye, is filter ke saath", aur poori list turant ban jaati hai.
1 / 2
⚡ Quick Recap
  • [expr for item in iterable if condition] — one-line loop
  • Traditional for+append se zyada readable aur fast
  • Bahut complex ho jaaye to traditional loop prefer karo
Is page mein (2 subtopics)

List comprehensions mein multiple if conditions chain kar sakte ho (AND logic), ya if-else ternary bhi use kar sakte ho transform karne ke liye.

# Multiple conditions (AND):
result = [x for x in range(50) if x % 2 == 0 if x % 5 == 0]
print(result)   # [0, 10, 20, 30, 40]

# if-else (transform, filter nahi):
labels = ["even" if x % 2 == 0 else "odd" for x in range(5)]
print(labels)   # ['even', 'odd', 'even', 'odd', 'even']
⚠️Common Mistake: [x for x in range(5) if x%2==0 else -1] jaisa syntax GALAT hai — if-else transform ke liye expression ke SHURU mein aata hai, filter ke liye END mein. Dono ko mix mat karo.

List comprehension turant poori list memory mein banati hai. Generator expression (()) values ko "lazily" generate karti hai — ek time par ek value, memory-efficient bade datasets ke liye.

# List comprehension — poori list memory mein:
squares_list = [x**2 for x in range(1000000)]   # bahut memory

# Generator expression — lazy, kam memory:
squares_gen = (x**2 for x in range(1000000))     # values on-demand

print(sum(squares_gen))   # kaam karta hai bina poori list banaye
💡Tip: Agar sirf ek baar iterate karna hai (jaise sum() ya loop mein), generator expression use karo — memory bachata hai. Agar list ko baar-baar access/index karna hai, list comprehension zaroori hai.