Список выходных данных карты разрушает результат карты - PullRequest
2 голосов
/ 27 марта 2019

Я попробовал следующий код:

squared = (map(lambda x: x**2, items))
print(list(squared))
print(list(squared))

Во-первых, он печатает список чисел в квадрате, снова печатая то же самое, печатает пустой список. Я хочу знать, в чем причина этого.

Ответы [ 3 ]

1 голос
/ 27 марта 2019

map возвращает итератор, который может быть повторен только один раз согласно: https://docs.python.org/3/library/stdtypes.html#typeiter.

0 голосов
/ 27 марта 2019

В Python 3 map возвращает итератор, который вы можете повторять только один раз. Если вы перебираете итератор во второй раз, он немедленно вызывает Stop Iteration, как если бы он был пустым. max потребляет все это, а min видит итератор пустым. Если вам нужно использовать элементы более одного раза, вам нужно вызвать список, чтобы получить список вместо итератора.

0 голосов
/ 27 марта 2019

Как уже упоминалось другими, созданный итератор может использоваться только один раз, поэтому сохраните результат и используйте его повторно.

items = [0,1,2,3,4,5,6,7,8,9]

squared = (map(lambda x: x**2, items))
abc = list(squared)
print(abc)
print(abc)
print(abc)
print(abc)

В качестве дополнительного примечания, у вас должно быть определение для items в вашем вопросе, как я поставил. Это позволило бы нам скопировать и вставить весь ваш код и быстро увидеть, что происходит вместо этогополучения ошибки.

...