Форум сайта python.su
Возможно, вопрос нубский, но туплю и не понимаю, почему второй print выдает пустой словарь:
>>>z=zip((1, 2), (“a”, “b”)) - в оригинале внутри два списка, а не кортежа - в посте почему-то пропадает содержание квадратных скобок, пришлось здесь заменить на круглые (
>>> print(dict(z))
{1: “a”, 2: “b”}
>>> print(dict(z))
{}
Отредактировано zzx1@R2D2 (Апрель 5, 2017 23:46:00)
Офлайн
Потому что zip возвращает итератор. Сделай так:
z = list(zip((1, 2), (“a”, “b”)))
Офлайн
ZZZ
Потому что zip возвращает итератор. Сделай так:
Отредактировано zzx1@R2D2 (Апрель 6, 2017 00:32:51)
Офлайн
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)) []
Офлайн
scidam
TypeError: ‘range’ object is not an iterator
Отредактировано zzx1@R2D2 (Апрель 6, 2017 10:05:53)
Офлайн
zzx1@R2D2В питоне есть два понятия: “итератор” и “итерабельное”
Видимо, неточность перевода с английского.
Офлайн
py.user.next
range() никогда не возвращала итератор, но объект типа range является итерабельным (перебираемым)
Отредактировано zzx1@R2D2 (Апрель 6, 2017 12:02:26)
Офлайн
zzx1@R2D2Читай это http://getpython3.com/diveintopython3/ , там таких неточностей нет и к тому же научат их делать.
Там, где я читал, по-русски написано “возвращает итератор” начиная с 3.0. Мне даже в голову не пришло перепроверять.
Отредактировано py.user.next (Апрель 6, 2017 14:26:21)
Офлайн