1.2.34 · Coding › Introduction to Programming (Python)
Intuition Ek-line ka idea
Ek list comprehension ek compact tarika hai naya list BANANE ka jisme kisi existing iterable ke items ko transform aur/ya filter kiya jaata hai. Yeh literally ek for loop hai jo ek list return karta hai , ek hi line mein likha hua. Tum ise almost ek English sentence ki tarah padhte ho:
"mujhe expr do for har x in iterable if condition sahi ho."
Intuition Motivation (KYU)
Lists banana code mein sabse zyada baar hone wala kaam hai. Comprehensions ke bina tum har baar ek 4-line ka ritual likhte ho:
result = [] # 1. empty list banao
for x in iterable: # 2. loop
if condition: # 3. filter
result.append(expr) # 4. transform + store
Yeh verbose hai, galti karna aasaan hai (initialise karna bhool gaye? galat indent?), aur intent (tumhe ek naya list chahiye) mechanics ke peeche chhupta hai (loops, appends). Comprehensions us poore pattern ko ek expression mein collapse kar dete hain jo KIYA karna chahte ho yeh batata hai, na ki HOW har item ko ek-ek karke push karo.
Definition List comprehension
Ek list comprehension is form ka ek expression hai
[ expr for x in iterable if condition ]
jo ek naya list evaluate karta hai jisme expr computed hota hai har x ke liye jo iterable se liya gaya ho,
lekin sirf un x ke liye jahan condition True ho. if condition part optional hai.
Chaaron moving parts, reading order vs execution order mein:
Part
Naam
Role
expr
output expression
naye list mein kya JAATA hai (har item ke liye last mein compute hota hai)
for x in iterable
the loop
items kahan se aate hain (pehle run hota hai)
if condition
filter (optional)
x ko tabhi rakho jab True ho
Common mistake Steel-man: "Yeh left to right run karta hai, toh
expr pehle hota hai."
Yeh sahi lagta hai kyunki hum English left-to-right padhte hain, aur expr pehle likha hota hai.
Reality: execution order hai for → if → expr. Python pehle ek x pick karta hai, phir condition test karta hai, aur tabhi expr compute karta hai. Fix: ise mentally equivalent loop ki tarah rewrite karo (loop, filter, phir append) taaki sahi order pata chale.
![[1.2.34-List-comprehensions-—-`[expr-for-x-in-iterable-if-condition]`.png]]
Worked example Derivation: loop se → comprehension
Goal: 0 se 9 tak ke even numbers ke squares.
Step 1 — seedha loop likho.
result = []
for x in range ( 10 ):
if x % 2 == 0 :
result.append(x ** 2 )
Yeh step kyun? Yeh intent clearly batata hai aur misread karna impossible hai.
Step 2 — 3 ingredients identify karo.
expr = x**2 (jo hum append karte hain)
iterable = range(10)
condition = x % 2 == 0
Yeh step kyun? Comprehension sirf inhi teen slots ko fill karna hai.
Step 3 — inhe template [expr for x in iterable if condition] mein daal do.
result = [x ** 2 for x in range ( 10 ) if x % 2 == 0 ]
# → [0, 4, 16, 36, 64]
Yeh step kyun? Same logic, zero boilerplate. Append aur init gayab ho jaate hain.
Worked example 1. Sirf Transform (koi filter nahi)
words = [ "apple" , "fig" , "kiwi" ]
lengths = [ len (w) for w in words] # [5, 3, 4]
Yeh step kyun? Koi if nahi, toh har item rakha jaata hai; expr = len(w) transform karta hai.
Worked example 2. Sirf Filter (expr == item khud)
nums = [ 3 , - 1 , 4 , - 5 , 9 ]
positives = [n for n in nums if n > 0 ] # [3, 4, 9]
Yeh step kyun? expr sirf n hai, toh hum items unchanged copy karte hain — comprehension ek pure filter ki tarah kaam karta hai. Yeh comprehension version hai "jo test pass kare usse rakho" ka.
if/else — TERNARY version (alag position!)
nums = [ 3 , - 1 , 4 , - 5 ]
signs = [n if n > 0 else 0 for n in nums] # [3, 0, 4, 0]
Yeh step kyun? Yahan if...else expr ka part hai (ek conditional expression jo value return karta hai), toh yeh ==for se PEHLE== jaata hai. Filtering if for ke BAAD jaata hai.
Neeche wali mistake dekho.
Worked example 4. Nested iterables (grid ko flatten karo)
grid = [[ 1 , 2 ], [ 3 , 4 ], [ 5 , 6 ]]
flat = [cell for row in grid for cell in row] # [1,2,3,4,5,6]
Yeh step kyun? Do fors outer-to-inner, top-to-bottom padhte hain — bilkul nested loops ki tarah:
for row in grid: phir for cell in row:. Sabse left wala for sabse outermost loop hai.
Common mistake Steel-man: "
if/else normal filter ki tarah for ke baad jaata hai."
Yeh sahi lagta hai kyunki filtering if actually for ke baad jaata hai. Lekin do alag
ifs hain:
Filter if (koi else nahi): for ke baad jaata hai → decide karta hai koi item include ho ya nahi.
[x for x in xs if x > 0]
Conditional-expression if/else : for se pehle jaata hai → decide karta hai kaunsi value emit ho.
[x if x > 0 else 0 for x in xs]
Fix: Poochho "kya main items drop kar raha hoon (filter, after) ya value choose kar raha hoon (ternary, before)?"
Tum kabhi bhi for ke baad bare if x>0 nahi likh sakte jo else se follow ho — woh SyntaxError hai.
Common mistake Steel-man: "Comprehensions hamesha faster aur clearer hote hain, toh inhe har jagah use karo."
Yeh aksar faster hote hain (loop C mein hota hai) aur clean — simple maps/filters ke liye. Lekin agar tumhe multiple nested ifs chahiye, side effects (print, file writes), ya ek 100-char monster line, toh readability khatam ho jaati hai. Fix: agar tum ise ek sentence ki tarah zor se nahi padh sakte, toh plain for loop use karo.
List comprehension ka general template kya hai? [expr for x in iterable if condition]
Execution order mein kaunsa part pehle run hota hai: expr, for, ya if? for (x pick karo), phir if (filter), phir expr (compute). Reading order ≠ execution order.
Filter if (koi else nahi) comprehension mein kahan jaata hai?for ke baad: [x for x in xs if cond].
Conditional if/else (ternary) kahan jaata hai?for se pehle, expr ke part ke roop mein: [a if cond else b for x in xs].
[x**2 for x in range(4)] ko loop ki tarah rewrite karo.r=[]; for x in range(4): r.append(x**2) → [0,1,4,9].
[c for row in grid for cell in row]-style multi-for ka matlab kya hai?Nested loops; sabse left wala for outermost loop hai, top-to-bottom padho.
[n for n in [-1,2,-3] if n>0] ki value kya hai?[2] (negatives filter ho jaate hain, items unchanged rehte hain).
Kya if condition part required hai? Nahi, yeh optional hai; iske bina har item include hota hai.
Recall Feynman: ek 12-saal ke bachche ko explain karo
Socho ek seb ki conveyor belt. Ek list comprehension ek chhoti factory hai:
belt har seb laati hai (for apple in belt), ek guard sade hue seb phenk deta hai
(if apple is good), aur ek machine bache hue har seb ko apple juice mein badal deti hai (expr = juice).
Ant mein tumhe apple juice ka ek naya box milta hai. Tumhe "khali box lo,
belt ke paas jao, seb check karo, juice box mein daalo" chaar baar likhne ki zarurat nahi padi — tumne sirf factory ko ek sentence mein describe kiya aur Python ne use tumhare liye bana diya.
Mnemonic Slot order yaad rakho
"EFI" — E xpr, F or, I f — "Every Filter Included."
Aur do ifs ke liye: "Choose-before, Cut-after" — value choose karna (ternary if/else)
for se pehle jaata hai; items cut karna (filter if) baad mein jaata hai.
For loops — comprehension ek for loop ke upar sugar hai.
Conditional expressions (ternary) — a if cond else b jo expr ke andar use hota hai.
Dictionary and set comprehensions — same idea [] ki jagah {} ke saath.
Generator expressions — (...) lazy version jo poora list nahi banata.
map() and filter() — transform aur filter ke functional equivalents.
range() and iterables — jo for x in iterable slot ko feed karta hai.
List comprehension one-liner
Execution order for-if-expr