将多类型嵌套列表扁平化为一维列表
可能重复的问题:
在Python中将不规则的列表扁平化
我有一个这样的列表 --
[1,[2,3],4,[5,[6,7]]]
我需要把它变成一个扁平的列表 --
[1,2,3,4,5,6,7]
为此,我现在使用的是一个 for
循环,配合 isinstance
,循环的次数是 #nests - 1
。
有没有更简单的方法可以把嵌套的列表变成扁平的呢?谢谢。
关于如何将嵌套列表变成扁平列表的类似问题,可以在这里找到:在Python中将列表的列表变成扁平列表。
2 个回答
1
试试这个:
def flat(mlist):
result = []
for i in mlist:
if type(i) is list:
result.extend(flat(i))
else:
result.append(i)
return result
8
def flatten(iterable):
"""Recursively iterate lists and tuples.
"""
for elm in iterable:
if isinstance(elm, (list, tuple)):
for relm in flatten(elm):
yield relm
else:
yield elm
编辑:这里的可迭代对象测试比较简单,可以通过检查是否有 __iter__
方法或者是否是 collections.Iterable
抽象基类的实例来改进。
编辑 2:@ChristopheD 说得对,这个问题是重复的,可以去看看链接中的问题。