在Python for循环中设置列表项

时间:2013-02-20 14:13:11

标签: python for-loop

大家阿罗哈,

假设我有一个列表,我希望列出该列表中的项目,然后我会这样做,然后我会这样做。

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

提前感谢您的帮助。

3 个答案:

答案 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();