Python list()函数处于(不可)迭代状态

时间:2019-01-18 21:27:46

标签: python-3.x list

我遇到list()函数的问题。我有一堂简单的课

class Foo(object):
   def __init__(self, value):
      self.value = value    

我正在尝试使用Foo对象构造一个列表:

lhs = list(Foo(1))
...
rhs = list(Foo(2))

return lhs + rhs

所需结果应为[Foo(1), Foo(2)]。但是,我需要在递归调用中使用这样的结果,因此在接下来的步骤中,该结果成为list()的{​​{1}}函数的参数,我想在另一个lhs后面附加这样的列表元素:

Foo

最终结果应为lhs = list([Foo(1), Foo(2)]) ... rhs = list(Foo(3)) return lhs + rhs 。问题是[Foo(1), Foo(2), Foo(3)]函数会引发list(Foo(1)),因为TypeError是不可迭代的。有什么办法可以解决?

编辑

一个更好的用例:

Foo

1 个答案:

答案 0 :(得分:1)

您可以只检查列表并使用.extend进行串联,或使用.append添加非列表项:

class Foo:
    def __init__(self, value):
        self.value = value
    def __repr__(self):
        return f'Foo({self.value})'

def concat(*args):
    result = []
    for arg in args:
        if isinstance(arg,list):
            result.extend(arg)
        else:
            result.append(arg)
    return result

a = concat(Foo(1),Foo(2),Foo(3))
print(a)
b = concat(Foo(6),Foo(7))
print(b)
c = concat(a,Foo(4),Foo(5),b)
print(c)

输出:

[Foo(1), Foo(2), Foo(3)]
[Foo(6), Foo(7)]
[Foo(1), Foo(2), Foo(3), Foo(4), Foo(5), Foo(6), Foo(7)]