2

アロハみんな、

私がリストを持っていて、そのリスト内のアイテムをリストアップして印刷したいとします。そうすれば、これを実行できます。

list = ['a', 'b', 'c']

for item in list:
   print item

これにより、結果が得られるはずです。

a
b
c

十分に単純です。

私の問題は、特定のイベントが発生したとき、たとえば「b」に到達したときに、ループを繰り返し続けたいが、到達したばかりのポイントから再開したいということです。したがって、出力はこれになります。

a
b
b
c

私はこれに沿った1つの解決策を試みましたが、うまくいきませんでした。

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 ループを使用して簡単に行うことができます。指示されたときに同じ要素を再び生成する独自のジェネレーター クラスを作成することで、さらに複雑な方法を考案することもできます。

編集:OK、これが複雑な方法です!

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 に答える