DEV Community

Discussion on: Understanding map, filter, and zip in Python

Collapse
 
mbjolnas profile image
Morten

Hi. Sorry I am not very experienced but I spotted a couple of problems in your final bit about zip().

First off you try to iterate over even_numbers without calling list(). I can see others have argued here that list() is not necessary, and I am but a hobby programmer, so I know very little of the deeper layers of programming and maybe I am doing it wrong, but when I try to run the code snippets here, it only works if I call list() on the filter and map returns. Otherwise I get errors in the for loop (does not iterate in the loop without list() on filter, gives a TypeError: 'map' object is not subscriptable.

You set even_numbers_index = 0 and then in the for loop you set squared = even_numbers_squared[even_numbers_index] but you never update even_numbers_index so for each iteration in the loop you keep calling the same index number. When we extend the input list a bit to numbers = [1,2,3,4,5,6,7,8] the result then becomes [(2, 4), (4, 4), (6, 4), (8, 4)] giving an error in output compared to the intended.

It works fine if we use zip() though and skip the for loop: [(2, 4), (4, 16), (6, 36), (8, 64)]

This is just in case others like me come by this otherwise great post to learn about map, filter and zip (and I really mean that. Short and well explained - thanks for that)

Full code I was running:

def even(number):
    if (number % 2) == 0:
        return  True
    return  False

def square(number):
    return number*number

numbers = [1,2,3,4,5,6,7,8]
even_numbers = list(filter(even, numbers))
even_numbers_squared = list(map(square, even_numbers))

combined = []
even_numbers_index = 0
for number in even_numbers:
    squared = even_numbers_squared[even_numbers_index]
    squared_tuple = (number, squared)
    combined.append(squared_tuple)

zipped_result = zip(even_numbers, even_numbers_squared)

print(combined)
print(list(zipped_result))
Enter fullscreen mode Exit fullscreen mode
Collapse
 
codespent profile image
Patrick Hanford

Good catches! Sorry to be late to responding, but I'll make sure to edit these, thank you.