Possible Duplicate:
Flatten (an irregular) list of lists in Python
我有一个 python 列表,其元素可以是字母或字母列表。我想编写一个函数来提取所有元素,如下所示
假设
l=['a',['b',['c']] ]
The output need to be ['a','b','c']
我认为递归是执行此操作的正确方法。 基本情况可能是列表仅包含一个元素。 我尝试编写此代码..但输出是
['a', 'b', ['c']]
有人可以告诉我这里出了什么问题吗?
def get_all_elements(mylist):
if len(mylist)==1:
return mylist[0]
else:
output=[mylist[0]]
output+=get_all_elements(mylist[1:])
return output
最佳答案
这似乎工作正常:
def flatten(iterable):
out = []
for i in iterable:
if hasattr(i,'__iter__'):
out.extend(flatten(i))
else:
out.append(i)
return out
l=['a',['b',['c']] ]
print flatten(l)
你出错的地方是,在你的解决方案中,mylist[0]
本身可以是一个列表(长度为1),其中包含另一个列表(任意长度)。在这种情况下,您只需将其退回即可。
关于python - 获取Python列表的所有元素,包括子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12976927/