python 列表展開,適用于N層嵌套的列表

網(wǎng)絡(luò)上公布了很多列表嵌套展開的語法,這里就不一一列舉了,方法大致包含 lambda語句, itertools. 這些工具存在問題,就是不能對N(N>3)的列表進行展開。曾經(jīng)最喜歡用的神器 from compiler.ast import flatten 可以解決這個問題,但是現(xiàn)在python3 不支持這個包了。 試來試去,索性不如自己寫一個。

def flatten(input_list):
    output_list = []
    while True:
        if input_list == []:
            break
        for index, i in enumerate(input_list):
            
            if type(i)== list:
                input_list = i + input_list[index+1:]
                break
            else:
                output_list.append(i)
                input_list.pop(index)
                break
    
    return output_list

代碼的原理比較簡單,偽代碼是:

  1. 遍歷原始列表
  2. 對于列表中的當(dāng)前元素
    2.1 如果它是非列表元素,存入輸出列表。
    2.2 如果它是列表元素:進入該列表,執(zhí)行2.1

一句話說清楚就是“遍歷原始列表,對于列表內(nèi)的元素,如果非列表就存入輸出列表中,如果是列表元素,則進入改列表元素并查看列表內(nèi)元素類型"

測試一下:

a = [ 1, 2, [3, 4, [5, 6, [7, 8, [9, [10, ['end'] ] ] ] ] ] ]
demo for the flatten() function

完全沒毛病,支持各種數(shù)據(jù)類型。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容