【问题标题】:zip argument #1 must support iteration on class object listzip 参数 #1 必须支持对类对象列表的迭代
【发布时间】:2018-07-23 05:32:46
【问题描述】:

我在 python (Python36-32) 中有一个点类

class point:
    def __init__(self , xPoint ,yPoint):
        self.x = xPoint
        self.y = yPoint

    def makeMeStr(self):
        return "("+str(self.x)+","+str(self.y)+")"

    def __repr__(self):
        return self.makeMeStr() 
    def __str__(self):
        return self.makeMeStr()

当我创建这些点的列表时以及当我这样做时

left, right = zip(*myListOfPoint)

我明白了

TypeError: zip argument #1 must support iteration

有什么好的建议

【问题讨论】:

  • 报错说应该是列表或者支持迭代的东西
  • 点类如何支持迭代。它有 2 个 doubles , x 和 y
  • 不,不是类,zip 需要一个迭代器
  • myListOfPoint 是一个默认支持迭代的列表。
  • 列表支持迭代。但是您不是在压缩myListOfPoints,而是在压缩*myListOfPoints* 将列表解压缩为zip 的一组单独参数。所以它告诉你你正在解包的列表中的元素不可迭代,而不是列表不可迭代。

标签: python scikit-learn


【解决方案1】:

为支持迭代,将__iter__() 方法添加到您的类(该方法将从point 产生x 和y 值):

class point:
    def __init__(self , xPoint ,yPoint):
        self.x = xPoint
        self.y = yPoint

    def makeMeStr(self):
        return "("+str(self.x)+","+str(self.y)+")"

    def __repr__(self):
        return self.makeMeStr()
    def __str__(self):
        return self.makeMeStr()

    def __iter__(self):
        yield self.x
        yield self.y


list_of_points = [point(1, 2), point(3, 4), point(5, 6)]

left, right = zip(*list_of_points)
print(left)  # this will print all x values
print(right) # this will print all y values

将打印:

(1, 3, 5)
(2, 4, 6)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 2016-03-11
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多