我遇到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
答案 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)]