list () применяется к zip-объекту два раза подряд - PullRequest
5 голосов
/ 01 ноября 2019

Я построил zip-объект и случайно заметил, что если дважды применить list () к этому объекту, то во второй раз он выдаст []. Мой код показан ниже:

coordinate = ['x', 'y', 'z']
values = [5, 7, 9]

my_map = zip(coordinate, values)

my_map_list_first = list(my_map)
my_map_list_second = list(my_map)

print(my_map_list_first)
print(my_map_list_second)

Вывод кода:

[('x', 5), ('y', 7), ('z', 9)]
[]

Я новичок в Python, поэтому моя терминология может быть не точной на 100%. Я попытался найти объяснение в Интернете, но проблема здесь в том, что является актуальным вопросом. (Хороший вопрос дает половину ответа). Поскольку я все еще изучаю Python, я, вероятно, не знаю, что спросить.

Я также пытался использовать тот симулятор Python, который видел в другой теме: http://www.pythontutor.com/visualize.html#mode=display Но я видел только то, что знал - my_map_list_second [], а не то, что происходит под капотом. Может кто-нибудь объяснить, что здесь произошло? А также укажи мне правильное направление в отношении «похожих» проблем, хотя я уверен, что со временем они станут ясны по мере моего развития Python.

Это также мой первый порт на этих форумах. Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 01 ноября 2019

zip возвращает generator, а не list. generator запускается только один раз, поэтому вам нужно будет снова вызвать zip для my_map_list_second

4 голосов
/ 01 ноября 2019

Вы ищете awnser о генераторе .

На самом деле, zip создаст generator, который не будет обработан, пока вы не iterate решите его, используя list в вашем примере. Другим важным свойством является то, что generator может быть только iterate once.

Последнее свойство объясняет, почему вы получаете пустой список во второй раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...