Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

itertools.cycle().next()?

Well, I was using itertools.cycle().next() method with Python 2.6.6, but now that I updated to 3.2 I noticed that itertools.cycle() object has no method next().

I used it to cycle a string in the spin()method of a Spinner class. So if we cycle the tuple ('|', '/', '-', '\\', '|', '/', '-'), it'll print: |, /, -, \ , |, /, -, |, / and so on...

I've searched the release notes of Python 3.0, 3.1 and 3.2 and didn't noticed any change on this. When this have changed? Is there any simple alternative to achieve the same functionality as before?

Thank you in advance.

like image 599
Paulo Freitas Avatar asked Mar 08 '11 20:03

Paulo Freitas


People also ask

What does cycle do in Itertools?

The cycle() function accepts an iterable and generates an iterator, which contains all of the iterable's elements. In addition to these elements, it contains a copy of each element.

Is Itertools faster than for loop?

That being said, the iterators from itertools are often significantly faster than regular iteration from a standard Python for loop.

What is Islice in Python?

islice() - The islice() function allows the user to loop through an iterable with a start and stop , and returns a generator. map() - The map() function creates an iterable map object that applies a specified transformation to every element in a chosen iterable.

What is chain in Python?

chain() function It is a function that takes a series of iterables and returns one iterable. It groups all the iterables together and produces a single iterable as output.


2 Answers

iter.next() was removed in python 3. Use next(iter) instead. So in your example change itertools.cycle().next() to next(itertools.cycle())

There is a good example here along with various other porting to python 3 tips. It also compares various other next() idioms in python 2.x vs python 3.x

like image 173
d0ugal Avatar answered Sep 17 '22 13:09

d0ugal


In Python 3.x, iterators don't have it.next() any more. use next(it) instead, which also works in Python 2.6 or above. Internally, this will call it.next() in Python 2.x and it.__next__() in Python 3.x.

like image 38
Sven Marnach Avatar answered Sep 18 '22 13:09

Sven Marnach