Я получаю ‘mapped_list’ пустой в следующей программе без его очистки. Пожалуйста, объясните

#python

#python

Вопрос:

 numbers = {}

#assign values to the dictionary 'numbers'

for i in range(5):
 numbers[i**2] = i

#function to check if number is in 'numbers' dictionary
def check(x):
 if x in numbers:
  return True
 else:
  return False

#list with random numbers
rand_nums = [8,9,25,16,18]
filtered_list = filter(check,rand_nums)

#printing 'filtered_list'

# NOTE:- using list() constructor for printing filter object
print(list(filtered_list))


#function to add 1




def add(x):
 return x 1

mapped_list = map(add,filtered_list)

#printing 'mapped_list'

# NOTE:- using list() constructor for printing filter object
print(list(mapped_list))
  

Ответ №1:

функция фильтра всегда возвращает повторяющийся объект (точно так же, как генератор). когда ваш код print(list(filtered_list)) выполняется, значение filtered_list становится пустым. Итак, позже, когда вы сопоставили тот же пустой отфильтрованный список, выполнив этот код: mapped_list = map(add,filtered_list) функция map получает пустой список.

Измените свой код следующим образом: filtered_list = list(filter(check,rand_nums)) чтобы получить ожидаемый результат.

Ответ №2:

Не уверен, почему вы получаете пустой отображенный список.

Я попробовал ваш код (после небольшой очистки)

 numbers = {}

for i in range(5):
    numbers[i ** 2] = i


def check(x):
    return x in numbers


rand_nums = [8, 9, 25, 16, 18]
filtered_list = list(filter(check, rand_nums))
print('filtered list: {}'.format(filtered_list))


def add(x):
    return x   1


mapped_list = list(map(add, filtered_list))
print('mapped list: {}'.format((mapped_list)))
  

Вывод (python 3.6.3)

 filtered list: [9, 16]
mapped list: [10, 17]