我的python迭代实现上的“object is iterable”错误

时间:2013-08-29 08:44:46

标签: python iterable

我正在尝试创建一个可迭代的类,但是我一直在墙上撞到我的头,所以说,“对象不可迭代”。这是我的代码:

class myiterable:
    def __init__(self, somelist):
        self.i = 0
        self.l = somelist

    def __iter__(self):
        return self

    def __next__(self):
        if self.i < len(self.l):
            self.i = self.i + 1
            return self.l[self.i-1]
        else:
            raise StopIteration



for i in myiterable([1, 2, 3, 4, 5]):
    print(i)

怎么了?我也试过next(self)代替__next__(self)无效!

2 个答案:

答案 0 :(得分:4)

您的代码存在一些问题:

  • 缩进
  • 如果您使用的是python 2,则应该定义next()方法而不是__next__()(如果在python 3上则保留原样)
  • ++self.i应替换为self.i += 1
  • self.l[i-1]应替换为self.l[self.i-1]

class myiterable:
    def __init__(self, somelist):
        self.i = 0
        self.l = somelist

    def __iter__(self):
        return self

    def next(self):
        if self.i < len(self.l):
            self.i += 1
            return self.l[self.i-1]
        else:
            raise StopIteration


for i in myiterable([1, 2, 3, 4, 5]):
    print(i)

打印:

1
2
3
4
5

答案 1 :(得分:2)

如果您刚刚复制了代码,则应该是因为缩进不良。将__iter____next__拉为与__init__相同的缩进。