Question bank — Built-in functions — map, filter, zip, enumerate, sorted, reversed, min, max, sum, any, all
1.2.33 · D5· Coding › Introduction to Programming (Python) › Built-in functions — map, filter, zip, enumerate, sorted, re
Pehle — woh chhoti vocabulary jo har trap mein use hoti hai
Neeche ke questions mein purposely chhote variable names hain (real Python aise hi likhte hain). Har naam ka matlab yahan hai trap mein milne se pehle — koi bhi prior Python idiom assume nahi kiya gaya:
Teen behaviour families — visual taxonomy
11 built-ins mein se har ek exactly teen buckets mein se kisi ek mein aata hai. Neeche ki figure poori page ek picture mein hai — ek baar dekho, phir traps in teen shapes ki variations lagenge.


True ya false — justify karo
map(f, xs) ek list return karta hai.
list(...) mein wrap karo. Raw print karne par <map object ...> dikhta hai.sorted(xs) original list xs ko change kar deta hai.
sorted photocopier hai: yeh ek nayi list banata aur return karta hai; original untouched rehti hai. xs.sort() hi original pe seedha likhta hai.all([]) True hai.
all items pe AND hai, aur AND ka identity element True hota hai, isliye "zero items mein se har ek truthy hai" vacuously satisfy hoti hai.any([]) True hai.
False hai; any items pe OR hai, aur OR ka identity element False hota hai, isliye kuch bhi true banane ke liye na hone par yeh false rehta hai.filter(None, xs) xs se None values remove karta hai.
None dene se har falsy item drop hoti hai (0, '', [], None, False), sirf None nahi.zip(a, b) error raise karta hai jab a aur b ki lengths alag hon.
zip a se EK item, phir b se EK item loop mein pull karta hai; jis moment koi bhi khatam ho, poora loop ruk jaata hai, toh chhota wala length decide karta hai aur bade wale ke baaki items kabhi pull nahi hote.enumerate(xs) hamesha 1 se count karta hai.
0 se start hota hai; agar 1-based indexing chahiye toh explicitly start=1 pass karte hain.reversed(xs) kisi bhi iterable pe kaam karta hai.
reversed use karne par TypeError raise hoti hai.sum(['a', 'b']) 'ab' deta hai.
sum apna accumulator 0 (number) se start karta hai, toh pehla step 0 + 'a' TypeError raise karta hai. Strings ke liye ''.join(...) use karo.Tum ek hi map object pe do baar loop kar sakte ho aur dono baar same result milega.
map object single-use conveyor belt hai; pehla full pass ise exhaust kar deta hai, aur doosre pass mein kuch nahi milta. (Neeche lifecycle figure dekho.)max aur min empty list par 0 return karte hain.
ValueError raise karte hain (koi element return karne ke liye nahi hota). Error se bachne ke liye default= argument do.sorted guarantee karta hai ki equal-key items apne original relative order mein rahenge.
Error dhundho
Har item neeche buggy line dikhata hai, phir step-by-step trace karta hai ki kaise galat hota hai, phir fix deta hai.
xs = xs.sort() — kya toot jaata hai?
xs.sort() xs ko in place sort karta hai aur None return karta hai → None wapis xs mein assign ho jaata hai → xs ab list nahi, None hai. Fix: xs = sorted(xs) use karo, ya xs.sort() ko apni alag line par call karo aur assign mat karo.print(map(str, [1,2,3])) — numbers kyun nahi?
map(...) conveyor belt object banata hai lekin kuch pull nahi karta → print object khud dikhata hai → output <map object at 0x...>. Fix: print(list(map(str, [1,2,3]))) belt ko run karta hai aur ['1','2','3'] collect karta hai.sorted(xs, key=lambda x: x > 5) sirf 5 se upar ke items rakhne ke liye — kya galat hai?
key har x ko True/False (uski comparison rank) se map karta hai, yeh kabhi kuch drop nahi karta → key False wale items key True wale se pehle sort hote hain, toh kuch remove nahi hota. Fix: items actually remove karne ke liye filter(lambda x: x > 5, xs) (ya comprehension) use karo.m = map(int, data); list(m); list(m) doosri baar [] deta hai — kyun?
list(m) belt ko end-to-end walk karta hai → belt ab empty → line 3 list(m) kuch nahi paata → []. Fix: ek baar materialize karo — m = list(map(int, data)) — phir list ko jitni baar chahiye reuse karo.max(people, key=len) jahan people = [('Ann',30),('Bo',25)] sabse umar wala dhundhne ke liye — bug?
len(('Ann',30)) 2 hai aur len(('Bo',25)) bhi 2 hai → har item tie karta hai → max pehla tied item ('Ann',30) return karta hai, sabse buda nahi. Fix: age field se compare karne ke liye key=lambda p: p[1] use karo.total = sum(map(square, nums)); avg = total / len(map(square, nums)) — len kyun fail karta hai?
len ko pehle se count pata hona chahiye, lekin ek map object kabhi apni length calculate nahi karta → Python TypeError: object of type 'map' has no len() raise karta hai. Fix: avg = total / len(nums) (input list ki length hoti hai), ya pehle list banao.for i in range(len(xs)): print(i, xs[i]) — iska cleaner, safer form kya hai?
for i, v in enumerate(xs): print(i, v) — koi index math nahi, off-by-one ya IndexError ka koi chance nahi, aur yeh kisi bhi iterable pe [i] ki zaroorat ke bina kaam karta hai.nums, letters = zip(pairs) ko [(1,'a'),(2,'b')] unzip karne ke liye — sirf ek column kyun?
* ke bina tumne EK argument diya, toh zip pairs ko khud iterate karta hai aur uske do tuples ko nums, letters mein unpack karne ki koshish karta hai → woh transpose nahi jo chahiye tha. Fix: zip(*pairs) pairs ko alag arguments mein spread karta hai toh yeh column-wise pair karta hai → (1,2) aur ('a','b').Why questions
map eagerly list banane ki jagah lazy kyun hai?
sum/any mein feed kar sakte ho bina poori sequence materialize kiye.any truthy item milte hi ruk kyun jaata hai?
all pehle falsy item par ruk jaata hai.Kabhi kabhi xs.sort() ki jagah sorted(xs) kyun prefer karte hain?
sorted ek value return karta hai original ko intact rakhte hue, toh tum unsorted data aur sorted view dono rakh sakte ho. .sort() original ordering destroy kar deta hai.filter(None, xs) shortcut ki tarah kyun exist karta hai?
None pass karne ka matlab hai "har item ki apni truthiness ko predicate ki tarah use karo" — bilkul upar ki truthiness figure wali falsy list follow karte hue.sum start argument kyun leta hai?
start initial accumulator value hai, jo total ko offset karne deta hai (sum(xs, 100)) ya accumulate karte waqt alag starting point set karne deta hai — halaanki strings ke liye phir bhi join use karo (0 se start karna text ke saath clash karta hai).enumerate khud se increment karne wale alag counter variable se behtar kyun hai?
key poori list ki jagah ek item at a time kyun receive karta hai?
key(item) woh per-item projection hai.Edge cases
list(zip()) (koi argument nahi) kya deta hai?
[] — pair karne ke liye kuch nahi, toh zero tuples produce hote hain.all([0]) kya return karta hai, aur kyun all length count nahi karta?
False — all truthiness test karta hai, aur 0 falsy hai; list non-empty hai lekin uska single item test fail karta hai.any([[], '', 0]) kya return karta hai?
False — har item falsy hai (empty list, empty string, zero), toh koi bhi item OR ko true nahi banata.sum([]) kya return karta hai?
0 — default start accumulator, kyunki initial 0 mein kuch nahi jodne par 0 hi rehta hai.max([], default=-1) kya return karta hai?
-1 — default supply karne par, empty iterable ValueError raise karne ki jagah woh fallback deta hai.min([], default=99) kya return karta hai, aur yeh min([]) se kaise alag hai?
99 — min wahi default= escape hatch accept karta hai jo max karta hai; iske bina, min([]) exactly usi "return karne ke liye koi element nahi" wajah se ValueError raise karta hai.min([3, 3, 3], key=abs) mein jab sab keys tie karein toh kya hota hai?
sorted mein).list(map(lambda a, b: a+b, [1,2,3], [10,20])) kya deta hai?
[11, 22] — multiple iterables ke saath map sabse chhote par ruk jaata hai, bilkul zip ki tarah, toh 3 drop ho jaata hai.list(reversed(range(3))) kya deta hai, aur range kyun allowed hai?
[2, 1, 0] — range ek proper sequence hai jiseki known length aur indexing hai, toh reversed ise pehle materialize kiye bina peeche se aage chal sakta hai.Exhaustion lifecycle — ek baar dekho, hamesha yaad rakho
Sabse common trap lazy iterator ko reuse karna hai. Figure ek map object ko do list(...) calls mein trace karta hai taaki tum belt khaali hote dekh sako.

Recall Har trap survive karne ka one-line rule
Kisi bhi built-in call ke teen sawaal pucho: Kya yeh lazy hai? (conveyor belt — list mein wrap karo, ek baar use karo), Kya yeh mutate karta hai ya return karta hai? (sorted copy return karta hai, .sort() original pe likhta hai), Kya yeh truthiness test karta hai? (filter/any/all falsy list follow karte hain: 0 '' [] {} () None False).