Explanation:
🔹 Step 1: Create Map Object
x = map(lambda x: x*2, [1,2,3])
Lambda function:
lambda x: x*2
Applied on:
[1,2,3]
Values produced:
1 → 2
2 → 4
3 → 6
So map will generate:
2, 4, 6
⚠️ Important:
map() does NOT create:
[2,4,6]
It creates an iterator.
Current iterator:
2 → 4 → 6
^
🔹 Step 2: Execute zip(x, x)
zip(x, x)
This is the trap 😈
Many people think:
zip([2,4,6], [2,4,6])
But that's wrong.
Both arguments are:
x
which means:
zip(SAME_ITERATOR, SAME_ITERATOR)
🔹 Step 3: Create First Pair
Zip asks first iterator for a value:
2
Iterator now:
4 → 6
^
Zip asks second iterator for a value.
But second iterator is the SAME object.
So next value becomes:
4
Iterator now:
6
^
First tuple:
(2,4)
🔹 Step 4: Try Creating Second Pair
Zip asks first iterator:
6
Iterator now:
END
Zip asks second iterator:
next(...)
But no values remain.
Python gets:
StopIteration
Zip immediately stops.
🔹 Step 5: Convert to List
Only one complete tuple was created:
(2,4)
Therefore:
list(zip(x,x))
becomes:
[(2,4)]
🔹 Step 6: Print Result
print([(2,4)])
Output:
[(2,4)]
⚡ Visual Trace
Initial:
2 → 4 → 6
^
Take first value:
2
Remaining:
4 → 6
^
Take second value:
4
Remaining:
6
^
Created:
(2,4)

0 Comments:
Post a Comment