假设我有一个列表,我希望列出该列表中的项目,然后我会这样做,然后我会这样做。
list = ['a', 'b', 'c']
for item in list:
print item
这应该导致这个。
a
b
c
足够简单。
我的问题是,当某个事件发生时,例如达到'b',那么我希望循环继续迭代,但是从刚刚到达的点再次开始。因此输出就是这个。
a
b
b
c
我尝试了一种解决方案,但是没有用。但
list = ['a', 'b', 'c']
for item in list:
print item
index = list.index(item)
if item == 'b':
item = list[index - 1]
我曾希望这会将项目设置为'a',以便下一次迭代将继续回到'b',但事实并非如此。
提前感谢您的帮助。
答案 0 :(得分:5)
为什么不以下:
for item in lst:
dostuff()
if item=="b":
dostuff()
答案 1 :(得分:4)
>>> def my_iter(seq):
... for item in seq:
... yield item
... if item == 'b':
... yield item
...
>>> for item in my_iter('abc'):
... print item
...
a
b
b
c
答案 2 :(得分:2)
您可以使用数字for循环轻松完成此操作。一种更复杂的方法也可以通过编写自己的生成器类来设计,当被告知时,它会再次产生相同的元素。
编辑:好的,这是复杂的方式!
class Repeater(object):
def __init__(self, sequence):
self._sequence = sequence
def __iter__(self):
for item in self._sequence.__iter__():
self._repeat = False
yield item
if self._repeat:
yield item
def repeat(self):
self._repeat = True
list = ['a', 'b', 'c']
repeater = Repeater(list)
for item in repeater:
print item
if (item == 'b'):
repeater.repeat();