¿Qué tal?
while BoolIter(N, default=True, falseIndex=N-1):
print 'some thing'
o de una manera más fea:
for _ in BoolIter(N):
print 'doing somthing'
o si quieres coger el último tiempo a través de:
for lastIteration in BoolIter(N, default=False, trueIndex=N-1):
if not lastIteration:
print 'still going'
else:
print 'last time'
donde:
class BoolIter(object):
def __init__(self, n, default=False, falseIndex=None, trueIndex=None, falseIndexes=[], trueIndexes=[], emitObject=False):
self.n = n
self.i = None
self._default = default
self._falseIndexes=set(falseIndexes)
self._trueIndexes=set(trueIndexes)
if falseIndex is not None:
self._falseIndexes.add(falseIndex)
if trueIndex is not None:
self._trueIndexes.add(trueIndex)
self._emitObject = emitObject
def __iter__(self):
return self
def next(self):
if self.i is None:
self.i = 0
else:
self.i += 1
if self.i == self.n:
raise StopIteration
if self._emitObject:
return self
else:
return self.__nonzero__()
def __nonzero__(self):
i = self.i
if i in self._trueIndexes:
return True
if i in self._falseIndexes:
return False
return self._default
def __bool__(self):
return self.__nonzero__()
Upvoting con el fin para compensar los votos a la baja: si Lionel hace esta pregunta, otros pueden Tengo la misma pregunta, y las respuestas a continuación serán útiles. – EOL
Término "Pythonic" está siendo usado en exceso. Es un sinónimo de "legible" y "fácilmente comprensible". En Python, al menos. – darioo
Posible duplicado de [¿Es posible implementar un Python para el bucle de rango sin una variable de iterador?] (Http://stackoverflow.com/questions/818828/is-it-possible-to-implement-a-python-for- range-loop-without-an-iterator-variable) –