I'm creating an interator like so:
some_list = [1,2,5,12,30,75,180,440]
iter(some_list)
I have a need to access the current value of an iterator again. Is there a current() method that allows me to stay on the same position?
I'm creating an interator like so:
some_list = [1,2,5,12,30,75,180,440]
iter(some_list)
I have a need to access the current value of an iterator again. Is there a current() method that allows me to stay on the same position?
 
    
     
    
    You certainly can make a class which will allow you to do this:
from collections import deque
class RepeatableIter(object):
    def __init__(self,iterable):
        self.iter = iter(iterable)
        self.deque = deque([])
    def __iter__(self):
        return self
    #define `next` and `__next__` for forward/backward compatability
    def next(self):
        if self.deque:
            return self.deque.popleft()
        else:
            return next(self.iter)
    __next__ = next
    def requeue(self,what):
        self.deque.append(what)
x = RepeatableIter([1, 2, 3, 4, 5, 6])
count = 0
for i in x:
    print i
    if i == 4 and count == 0:
        count += 1
        x.requeue(i)
The question is really why would you want to?
 
    
    You can use numpy.nditer to build your iterator, then you have many amazing options including the current value.
import numpy
rng = range(100)
itr = numpy.nditer([rng])
print itr.next()          #0
print itr.next()          #1
print itr.next()          #2
print itr.value           #2 : current iterator value
 
    
    Adapting the third example from this answer:
class CurrentIterator():
    _sentinal = object()
    _current = _sentinal
    @property
    def current(self):
        if self._current is self._sentinal:
            raise ValueError('No current value')
        return self._current
    def __init__(self, iterable):
        self.it = iter(iterable)
    def __iter__(self):
        return self
    def __next__(self):
        try:
            self._current = current = next(self.it)
        except StopIteration:
            self._current = self._sentinal
            raise
        return current
    next = __next__  # for python2.7 compatibility
Some interesting points:
_sentinal so an error can be raised if no current value existsproperty so current looks like a simple attribute__next__ and next = __next__ for Python 2&3 compatibility 
    
    