Python嵌套列表轉(zhuǎn)一維的方法(壓平嵌套列表)
前一段去云英面試,技術(shù)官很”不厚道“了問了一個(gè)非常簡單的問題:如何將多維列表轉(zhuǎn)化了一維的?當(dāng)時(shí)雖然想到了使用迭代或者列表生成式可以做到,但是可以沒能可行的代碼,回來后一頓后悔。
對(duì)于規(guī)范的且嵌套維度較低的多維列表,python中有很多方法可以實(shí)現(xiàn):
a=[[1,2],[3,4],[5,6]] print [j for i in li for j in i] #or from itertools import chain print list(chain(*a)) #or import itertools a = [[1,2,3],[4,5,6], [7], [8,9]] out = list(itertools.chain.from_iterable(a)) #or a=[[1,2],[3,4],[5,6]] t=[] [t.extend(i) for i in a] print t #or a=[[1,2],[3,4],[5,6]] print sum(a,[]) #or reduce(lambda x, y: x+ y, a)
對(duì)于復(fù)雜的多維嵌套列表就需要使用一些復(fù)雜的方法:
#遞歸的方法比較容易理解 def expand_list(nested_list): for item in nested_list: if isinstance(item, (list, tuple)): for sub_item in expand_list(item): yield sub_item else: yield item #在stackoverflow看到大牛的列表生成式版本 func = lambda x: [y for l in x for y in func(l)] if type(x) is list else [x] #生成式的方法還有很多,可以自行摸索
對(duì)于使用python2.X的童鞋,還可以使用flatten函數(shù)來做:
>>> d=[1,2,3,[4,5],[6,7,[8,9]]] >>>from compiler.ast import flatten >>>flatten(a) [1, 2, 3, 4, 5, 6,7,8,9]
其實(shí)上邊列舉的方法僅僅是冰山一角,大海下的冰山就等這童鞋們自行去尋找挖掘了。
以上這篇Python嵌套列表轉(zhuǎn)一維的方法(壓平嵌套列表)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Python-turtle庫繪制路飛的草帽骷髏旗、美國隊(duì)長的盾牌、高達(dá)的源碼
這篇文章主要介紹了基于Python-turtle庫繪制路飛的草帽骷髏旗、美國隊(duì)長的盾牌、高達(dá)的源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02Numpy 多維數(shù)據(jù)數(shù)組的實(shí)現(xiàn)
這篇文章主要介紹了Numpy 多維數(shù)據(jù)數(shù)組的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06python?sns.countplot()?繪畫條形圖詳情
這篇文章主要介紹了python?sns.countplot()繪畫條形圖詳情,sns.countplot()用于畫類別特征的頻數(shù)條形圖,更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-06-06Python socket實(shí)現(xiàn)的簡單通信功能示例
這篇文章主要介紹了Python socket實(shí)現(xiàn)的簡單通信功能,結(jié)合實(shí)例形式分析了Python socket通信的相關(guān)概念、原理、客戶端與服務(wù)器端實(shí)現(xiàn)技巧以及socketserver模塊多并發(fā)簡單實(shí)現(xiàn)方法,需要的朋友可以參考下2018-08-08