你知道如何将python中嵌套的列表扁平化吗?
Posted 来自东方地灵殿的小提琴手
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你知道如何将python中嵌套的列表扁平化吗?相关的知识,希望对你有一定的参考价值。
楔子
将python中嵌套的列表扁平化,指的就是:
lst = [1, [[[[3, 3], 5]]], [[[[[[[[[[[[[6]]]]], 8]]], "aaa"]]]], 250]]
# 类似于上面的列表,我们要得到下面的结果
[1, 3, 3, 5, 6, 8, "aaa", 250]
那么我们要如何做呢?
yield和yield from
关于如何把一个嵌套的列表扁平化,我们需要使用yield和yield from。这两位老铁的底层实现原理我不想深究,因为牵扯的东西太多了,况且针对目前的问题我们也用不到,这里我们简单的说一下。
def foo():
yield [1, 2, 3]
def bar():
yield from [1, 2, 3]
print(foo().__next__()) # [1, 2, 3]
print(bar().__next__()) # 1
"""
我们看到关于yield,它是把yield后面的整个元素都迭代出来
但是对于yield from,它的后面必须跟着一个可迭代的对象,然后依次迭代这个可迭代对象里面的每一个元素
"""
因此,我们就找到了方法。
def flat(l: list):
for _ in l:
if isinstance(_, list):
yield from flat(_)
else:
yield _
lst = [1, [[[[3, 3], 5]]], [[[[[[[[[[[[[6]]]]], 8]]], "aaa"]]]], 250]]
print([_ for _ in flat(lst)]) # [1, 3, 3, 5, 6, 8, 'aaa', 250]
以上是关于你知道如何将python中嵌套的列表扁平化吗?的主要内容,如果未能解决你的问题,请参考以下文章
2021-11-08:扁平化嵌套列表迭代器。给你一个嵌套的整数列表 nestedList 。每个元素要么是一个整数,要么是一个列表;该列表的元素也可能是整数或者是其他列表。请你实现一个迭代器将其扁平化
如何更有效地将嵌套列表扁平化为一个列表而不是使用 unlist 方法?