获取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个?