码迷,mamicode.com
首页 > 编程语言 > 详细

你知道如何将python中嵌套的列表扁平化吗?

时间:2020-03-05 22:19:46      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:就是   它的   next   list   针对   yield   需要   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中嵌套的列表扁平化吗?

标签:就是   它的   next   list   针对   yield   需要   python   你知道   

原文地址:https://www.cnblogs.com/traditional/p/12422934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!