1.2.33 · D5 · HinglishIntroduction to Programming (Python)

Question bankBuilt-in functions — map, filter, zip, enumerate, sorted, reversed, min, max, sum, any, all

2,374 words11 min read↑ Read in English

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.

Figure — Built-in functions — map, filter, zip, enumerate, sorted, reversed, min, max, sum, any, all
Figure — Built-in functions — map, filter, zip, enumerate, sorted, reversed, min, max, sum, any, all

True ya false — justify karo

map(f, xs) ek list return karta hai.
False — yeh ek lazy iterator return karta hai (conveyor belt); list tabhi milti hai jab tum ise list(...) mein wrap karo. Raw print karne par <map object ...> dikhta hai.
sorted(xs) original list xs ko change kar deta hai.
False — 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.
True — 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 — yeh 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.
False (misleading naam) — predicate ki jagah 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.
False — internally 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.
False — default mein 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.
False — ise ek sequence with known length chahiye (list, tuple, str, range) taaki woh last index se peeche chal sake. Ek plain generator ki na length hoti hai na end, isliye reversed use karne par TypeError raise hoti hai.
sum(['a', 'b']) 'ab' deta hai.
False — 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.
False — ek 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.
False — yeh empty iterable par 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.
True — Python ka sort stable hai, isliye key ke under equal compare karne wale items apne input order mein rehte hain.

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?
Trace: xs.sort() xs ko in place sort karta hai aur None return karta haiNone 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?
Trace: 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?
Trace: 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?
Trace: line 2 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?
Trace: 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?
Trace: 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?
Trace: * 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?
Memory aur time bachane ke liye — yeh har result tabhi produce karta hai jab manga jaaye, toh tum ise chain kar sakte ho ya sum/any mein feed kar sakte ho bina poori sequence materialize kiye.
any truthy item milte hi ruk kyun jaata hai?
Kyunki OR already decide ho jaata hai jab ek operand true ho — koi baad ka item jawab nahi badal sakta, toh short-circuiting kaam bachata hai. Usi tarah 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?
Yeh common "empty/zero/None ka kachda hatao" operation 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?
Yeh index ko loop se couple karta hai toh tum increment bhool nahi sakte ya accidentally do baar increment nahi kar sakte; yeh jo tumhara matlab hai woh padhta hai aur ek liner hai.
key poori list ki jagah ek item at a time kyun receive karta hai?
Kyunki sorting/min/max items ko pairwise compare karte hain, isliye har item ko independently apni comparison value se map karna hota hai; key(item) woh per-item projection hai.

Edge cases

list(zip()) (koi argument nahi) kya deta hai?
Ek empty list [] — 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?
Falseall 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?
-1default 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?
99min 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?
Yeh pehla element return karta hai jo minimum key achieve karta hai, toh ties original position se break hoti hain (wahi stable-first rule jaise 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.

Figure — Built-in functions — map, filter, zip, enumerate, sorted, reversed, min, max, sum, any, all

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).