map is not list

Решая задачу из Advent of code, неожиданно споткнулся. Если отбросить лишнее, из строки получаю набор ключей и проверяю их на списках, есть ли они там

str_keys = '55 66 77'
numbers = [66, 22, 77, 44, 55, 33]

keys = map(int, str_keys.split(' '))

for _ in range(2):
    cnt = 0
    for key in keys:
        if key in numbers:
            cnt += 1
    print(f'в списке есть {cnt} ключей')

print(type(keys))

Ответ озадачил, первая проверка отрабатывает как надо, вторая не работает:

И только когда пошёл смотреть дебагером - увидел ошибку. Всё элементарно, но как то раньше на эти грабли не наступал

Переменная keys вернёт список ключей - но только один раз. Это не список, а иттератор.

Тут нужно было либо сразу преобразовать в список keys = list(map(int, str_keys.split(' '))), либо прописать map в цикле вместо переменной for key in map(int, str_keys.split(' ')):

Written on December 6, 2023