2

大家好,

假设我有一个列表,并且我想列出该列表中的项目,然后将它们打印出来,然后我会这样做。

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”,但事实并非如此。

提前感谢您的帮助。

4

3 回答 3

5

为什么不如下:

for item in lst:
    dostuff()
    if item=="b":
        dostuff()
于 2013-02-20T14:15:04.430 回答
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
于 2013-02-20T14:20:20.680 回答
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();
于 2013-02-20T14:15:04.360 回答