Python將多維列表「拉伸」為一維列表的10種方式
來源:投稿 作者:Fairy
編輯:學姐
在Python編程中,列表是一種常用的數(shù)據(jù)類型。當我們遇到了一個嵌套列表,如果想將它扁平化為一維列表,就可以使用下面10種方法之一來實現(xiàn)這個需求。
1. 使用兩層循環(huán)遍歷
這段代碼中,定義了一個二維列表lst
,其中包含了三個子列表(即嵌套的列表)。然后創(chuàng)建了一個空列表new_lst
。接下來使用for
循環(huán)遍歷lst中的每一個子列表,再使用嵌套的for循環(huán)遍歷子列表中的每一個元素,并將這些元素添加到new_lst中。最后輸出new_lst,即為將lst扁平化為一維列表的結(jié)果。

2. 使用flatten()函數(shù)
這段代碼中,定義了一個二維列表lst
,其中包含了三個子列表(即嵌套的列表)。接下來,使用NumPy
庫的array()
方法將lst轉(zhuǎn)換成了一個NumPy數(shù)組,再調(diào)用該數(shù)組的flatten()
方法將其扁平化為一個一維數(shù)組。最后,將該一維數(shù)組轉(zhuǎn)換成一個標準的Python
列表,并將其賦值給變量new_lst
。最終輸出new_lst,即為將lst扁平化為一維列表的結(jié)果。

3. 使用列表解析式
這段代碼中,定義了一個二維列表lst
,其中包含了三個子列表(即嵌套的列表)。然后,使用一行代碼創(chuàng)建了一個新的一維列表new_lst
。具體來說,這行代碼中使用了兩層for
循環(huán),并在內(nèi)部使用了列表推導式的語法。在這里,外層for循環(huán)用于遍歷lst中的每一個子列表,而內(nèi)層for循環(huán)則用于遍歷子列表中的每一個元素。最后,在列表推導式中使用了element
這個變量來存儲遍歷到的元素,并將其添加到新列表new_lst中。

4. 使用reduce()函數(shù)
這段代碼中,定義了一個二維列表lst
,其中包含了三個子列表(即嵌套的列表)。接下來,使用reduce()
函數(shù)和operator.concat
函數(shù)實現(xiàn)將lst中的所有子列表連接在一起。具體來說,operator.concat函數(shù)用于將兩個列表連接在一起,而reduce()函數(shù)則用于對lst中的每一個子列表依次執(zhí)行concat
操作。最終,reduce函數(shù)得到的結(jié)果是一個一維列表,存儲在變量new_lst中。

5. 使用from_iterable()函數(shù)
這段代碼中,定義了一個二維列表lst
,其中包含了三個子列表(即嵌套的列表)。接下來,使用itertools.chain.from_iterable()
函數(shù)實現(xiàn)將lst中的所有子列表連接在一起。具體來說,from_iterable()
函數(shù)用于將一個可迭代對象中的所有元素連接到一起,而chain()
函數(shù)則用于在多個可迭代對象之間建立鏈接。最終,使用list()
函數(shù)將生成的迭代器轉(zhuǎn)換為一個新的一維列表new_lst
。

6. 使用sum()函數(shù)
這段代碼中,定義了一個二維列表lst
,其中包含了三個子列表(即嵌套的列表)。接下來,使用sum()
函數(shù)實現(xiàn)將lst中的所有子列表連接在一起。具體來說,sum()函數(shù)用于對多個可迭代對象進行求和操作,而對于列表而言,在使用sum()函數(shù)時傳入一個空列表[]作為初始值,就可以將多個子列表拼接在一起。最終,使用list()函數(shù)將生成的結(jié)果轉(zhuǎn)換為一個新的一維列表new_lst。

7. 使用ravel()函數(shù)
這段代碼中,定義了一個二維列表lst
,其中包含了三個子列表(即嵌套的列表)。接下來,使用numpy
中的ravel
函數(shù)對lst進行扁平化操作,并將其轉(zhuǎn)換為一個一維數(shù)組。最后,使用list()函數(shù)將numpy數(shù)組轉(zhuǎn)換為一個新的一維列表new_lst。

8. 使用reshape()函數(shù)
這段代碼中,定義了一個二維列表lst
,其中包含了三個子列表(即嵌套的列表)。接下來,使用numpy.array()
函數(shù)將lst轉(zhuǎn)換為一個numpy數(shù)組,并使用reshape()
函數(shù)對其進行重新形狀,將其扁平化為一個一維數(shù)組。最后,使用tolist()
函數(shù)將numpy數(shù)組轉(zhuǎn)換為一個新的一維列表new_lst。

9. 使用flatten()函數(shù)
這段代碼中,定義了一個二維列表lst
,其中包含了三個子列表(即嵌套的列表)。接下來,使用numpy.array()
函數(shù)將lst轉(zhuǎn)換為一個numpy數(shù)組,并使用flatten()
函數(shù)對其進行扁平化操作,將其扁平化為一個一維數(shù)組。需要注意的是,該函數(shù)傳入的參數(shù)'C'
表示扁平化時按照行優(yōu)先順序進行,也就是將每一行展開到一起。最后,使用list()函數(shù)將numpy數(shù)組轉(zhuǎn)換為一個新的一維列表new_lst。

10. 使用stack()函數(shù)
這段代碼中,定義了一個二維列表lst,其中包含了三個子列表(即嵌套的列表)。接下來,使用pandas.DataFrame()函數(shù)將lst轉(zhuǎn)換為一個DataFrame數(shù)據(jù)框,并使用stack()函數(shù)對其進行堆疊操作,將其扁平化為一個Series數(shù)據(jù)序列。然后,使用list()函數(shù)將Series轉(zhuǎn)換為一個新的一維列表new_lst。

以上10種方式,你了解哪幾種呢?
推薦課程
《Python ·? AI&數(shù)據(jù)科學入門》

關注“學姐帶你玩AI”公眾號,回復“Python”了解課程詳情~