Найти - Пользователи
Полная версия: Помогите разобраться (zip)
Начало » Python для новичков » Помогите разобраться (zip)
1
zzx1@R2D2
Возможно, вопрос нубский, но туплю и не понимаю, почему второй print выдает пустой словарь:

>>>z=zip((1, 2), (“a”, “b”)) - в оригинале внутри два списка, а не кортежа - в посте почему-то пропадает содержание квадратных скобок, пришлось здесь заменить на круглые (

>>> print(dict(z))
{1: “a”, 2: “b”}
>>> print(dict(z))
{}
ZZZ
Потому что zip возвращает итератор. Сделай так:
z = list(zip((1, 2), (“a”, “b”)))
zzx1@R2D2
ZZZ
Потому что zip возвращает итератор. Сделай так:

Но почему тогда похожее не происходит, к примеру, здесь:
>>> z=range(5)

Сколько не выводи print(list(z)) пустого списка не получишь, как в первом примере с пустым словарем.
scidam
 x = range(5)
next(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'range' object is not an iterator
>>>

 >>> z = iter(range(5))
>>> print(list(z))
[0, 1, 2, 3, 4]
>>> print(list(z))
[]
zzx1@R2D2
scidam
TypeError: ‘range’ object is not an iterator

Спасибо! С вашей помощью, коллеги, разобрался. Видимо, надо меньше читать русскоязычные статьи. Меня смутило, что везде, где я читал, указывается, что в python 3.x range(x) как раз и есть итератор, и не понимал, почему два вроде итератора ведут себя по-разному. Видимо, неточность перевода с английского.
py.user.next
zzx1@R2D2
Видимо, неточность перевода с английского.
В питоне есть два понятия: “итератор” и “итерабельное”
https://docs.python.org/3/glossary.html#term-iterable
https://docs.python.org/3/glossary.html#term-iterator

range() никогда не возвращала итератор, но объект типа range является итерабельным (перебираемым).
zzx1@R2D2
py.user.next
range() никогда не возвращала итератор, но объект типа range является итерабельным (перебираемым)

Вот и я о том же… Там, где я читал, по-русски написано “возвращает итератор” начиная с 3.0. Мне даже в голову не пришло перепроверять. Потом, когда здесь выше написали ‘range’ object is not an iterator, то пошел читать английские тексты и там как-раз и про “iterator” и про “iterable”. В общем, по неграмотности и из-за ошибки чьего-то перевода завис на день.
py.user.next
zzx1@R2D2
Там, где я читал, по-русски написано “возвращает итератор” начиная с 3.0. Мне даже в голову не пришло перепроверять.
Читай это http://getpython3.com/diveintopython3/ , там таких неточностей нет и к тому же научат их делать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB