你知道如何將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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM