从多类型嵌套列表中制作平面列表[重复]
Posted
技术标签:
【中文标题】从多类型嵌套列表中制作平面列表[重复]【英文标题】:Making a flat list out of a multi-type nested list [duplicate] 【发布时间】:2011-09-23 21:33:07 【问题描述】:可能重复:Flatten (an irregular) list of lists in Python
我有以下列表--
[1,[2,3],4,[5,[6,7]]]
我需要把它弄平——
[1,2,3,4,5,6,7]
为此,我目前使用for
循环和isinstance
,循环数为#nests - 1
。
使嵌套列表扁平化的最简单方法是什么?谢谢。
可以在此处找到有关从嵌套列表(仅)中制作平面列表的类似问题:Making a flat list out of list of lists in Python。
【问题讨论】:
【参考方案1】:来自webhelpers.misc.flatten
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 绝对正确,这是一个骗子,所以请转到链接的问题。
【讨论】:
嗨,我很难理解这行“for relm in flatten(elm)”。递归在这里工作的程度如何。,在每次迭代之后,它是否会“yield relm”行? ?有人可以用空跑来解释我吗?请 我们可以像这样处理迭代............ try: # it_is = iter(x) # # 如果它不是可迭代的,则按原样返回列表# 产量 x【参考方案2】:试试这个:
def flat(mlist):
result = []
for i in mlist:
if type(i) is list:
result.extend(flat(i))
else:
result.append(i)
return result
【讨论】:
以上是关于从多类型嵌套列表中制作平面列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章