获取python列表的所有元素,包括子列表

获取python列表的所有元素,包括子列表,python,list,Python,List,可能重复: 我有一个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

可能重复:

我有一个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

当您检查
mylist
的长度是否为1时,您不会检查其内容是否为列表。这里有一个例子可以突出你的问题

get_all_elements([1, [2, [3, 4]]])

如果您想要一个完整的解决方案,并且是查看的好地方。

当您检查mylist的长度是否为1时,您不会检查其内容是否为列表。这里有一个例子可以突出你的问题

get_all_elements([1, [2, [3, 4]]])

如果你想要一个完整的解决方案,这是一个很好的去处。

这将适用于多达3个层次的深度,如果深度是任意的,我认为你将无法使用列表理解

[grandchild for parent in l for child in parent for grandchild in child]

这将适用于多达3个层次的深度,如果深度是任意的,我认为您将无法使用列表理解

[grandchild for parent in l for child in parent for grandchild in child]
这似乎是可行的:

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),其中包含另一个列表(任意长度)。在这种情况下,您只是返回了它。

这似乎可以正常工作:

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),其中包含另一个列表(任意长度)。在这种情况下,您只是返回了它。

它们总是单字母吗?列表嵌套的深度是任意的,还是最多3个?它们总是单字母吗?列表嵌套的深度是任意的,还是最多3个?