Как создать итератор для списка строк - PullRequest
0 голосов
/ 28 мая 2020

У меня есть список со строковыми элементами, и в конце я хочу получить:

a hello
b hello
c hello
d hello

И у меня есть этот код:

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

class Iterator:

    def __init__(self, start, end):
        self.start=start
        self.end=end

    def __iter__(self):
        return self

    def __next__(self):
        self.start += ' hello'
        if self.start == list[-1]:
          raise StopIterration 
        return self.start

if __name__ == '__main__':
    for item in Iterator(list[0], list[-1]):
        print(item)

Однако метонд __next__ НЕ МОЖЕТ ПЕРЕМЕСТИТЬ ОТ list[0] к list[1], а python начал сходить с ума и добавлять миллиард «hello» к list[0], и даже не может остановить программу, так что это ад oop сейчас. Проблемы:

  1. Добавление миллиарда «привет» к list[0], не переход к list[1].
  2. Не завершает sh программу, несмотря на то, что я написал какое условие для фини sh.

enter image description here

1 Ответ

3 голосов
/ 28 мая 2020

Ваш экземпляр Iterator вообще не привязан к списку; не имеет значения, что вы использовали список для создания экземпляра; Iterator.__init__ видел только два строковых значения.

__init__ требуется ссылка на сам список для использования __next__. Кроме того, hello - это то, что вы добавляете к возвращаемому значению __next__, а не то, что вам нужно добавлять во внутреннее состояние каждый раз, когда вы вызываете __next__.

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

class Iterator:

    def __init__(self, <b>lst</b>):
        <b>self.lst = lst
        self.start = 0</b>

    def __iter__(self):
        return self

    def __next__(self):
        <b>try:
            value = self.lst[self.start]
        except IndexError:
            raise StopIteration
        self.start += 1

        return value + ' hello'</b>

if __name__ == '__main__':
    for item in Iterator(<b>list</b>):
        print(item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...