Я понимаю, что такие функции, как диапазон()
и ZIP () может быть использовано в цикле for. Однако я ожидал
ассортимент () для вывода списка - так же, как след
в оболочке Unix. Если я запускаю следующий код:
a=range(10)
print(a)
На выходе в диапазоне(10), предполагая, что он's не в списке, но другой тип объекта. на молнии()
имеет аналогичное поведение при печати, выводя что-то вроде
<zip object at "hexadecimal number">
Так что мой вопрос для чего они, какие преимущества дает их делать это, и как я могу получить их выводить в списки без цикла?
Вы должны быть с помощью 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')]
В 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')
<zip object at 0x01DB7120>
>>> list(zip('abc', 'abc'))
[('a', 'a'), ('b', 'b'), ('c', 'c')]
>>>
Хотя это может показаться бесполезным на первый взгляд, это изменение в поведении спектр
и ZIP
на самом деле повышает работоспособность. Это потому, что ZIP и предметов производить предметы, поскольку они необходимы, вместо того, чтобы создавать список, чтобы держать их все сразу. Это поможет уменьшить потребление памяти и повышает скорость работы.
Диапазон (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!