Диапазон питона() и ZIP() тип объекта

Я понимаю, что такие функции, как диапазон() и ZIP () может быть использовано в цикле for. Однако я ожидалассортимент () для вывода списка - так же, как след в оболочке Unix. Если я запускаю следующий код:

a=range(10)
print(a)

На выходе в диапазоне(10), предполагая, что он's не в списке, но другой тип объекта. на молнии() имеет аналогичное поведение при печати, выводя что-то вроде

<zip object at "hexadecimal number">

Так что мой вопрос для чего они, какие преимущества дает их делать это, и как я могу получить их выводить в списки без цикла?

Комментарии к вопросу (2)
Решение

Вы должны быть с помощью Python 3.

В Python 2, объекты молния и спектр вообще ведут себя так, как вы предполагаете, возвращая списки. Они были изменены на генератор-как объекты, которые производят элементы по требованию, а не расширить весь список в памяти. Одно преимущество было большей эффективности в их типичные случаи использования (например, идя по ним).

В "ленивый" по версии существуют в Python 2.X, но у них разные имена, т. е. xrange и модуле itertools.izip функций`.

Для получения всех выходных сразу в знакомый объект списка, вы можете просто назвать список для перебора и потреблять содержание:

>>> list(range(3))
[0, 1, 2]
>>> list(zip(range(3), 'abc'))
[(0, 'a'), (1, 'b'), (2, 'c')]
Комментарии (4)

В Python 3.х., спектр возвращает объект Range, а не список, как это сделал в Python 2.х. Аналогично, Молния теперь возвращает объект zip вместо списка.

Чтобы сделать эти объекты как списки, положить их в список:

>>> range(10)
range(0, 10)
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> zip('abc', 'abc')

>>> list(zip('abc', 'abc'))
[('a', 'a'), ('b', 'b'), ('c', 'c')]
>>>

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

Комментарии (0)

Диапазон (xrange в Python 2.*) объекты неизменяемых последовательностей, в то время как молния модуле itertools (`.изделия izip функций) является объект-генератор. Составить список из генератора или последовательности, просто бросили в список. Например:

>>> x = range(10) 
>>> list(x)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Но они различаются так, как элементы создаются. Нормальные генераторы изменчивы и выхлопных их содержание, если на каждой итерации, в то время как круг является неизменным, и Дон'т:

>>> list(x) # x is a range-object
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # second cast to list, contents is the same
>>> y = zip('abc', 'abc')
>>> list(y) # y is a generator
[('a', 'a'), ('b', 'b'), ('c', 'c')]
>>> list(y) 
[] # second cast to list, content is empty!
Комментарии (0)