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.
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.
That being said, the iterators from itertools are often significantly faster than regular iteration from a standard Python for loop.
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.
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.
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With