Python實(shí)現(xiàn)嵌套列表的7中方法總結(jié)
大家好,今天給大家講解一個(gè)Python的進(jìn)階知識(shí)點(diǎn):如何將一個(gè)嵌套的大列表展開(kāi)形成一個(gè)列表。
小編提供了7種方法供大家學(xué)習(xí)參考:
- for循環(huán)
- 列表推導(dǎo)式
- 使用第三方庫(kù)itertools
- 使用sum函數(shù)
- python自加(+=)
- 使用extend函數(shù)
- 使用遞歸函數(shù)
模擬數(shù)據(jù)
data = [[1,2,3],[4],[5,6,7],[8,9],[10]] # 模擬數(shù)據(jù) data
[[1, 2, 3], [4], [5, 6, 7], [8, 9], [10]]
這份模擬的數(shù)據(jù)有2個(gè)特點(diǎn):
- 嵌套列表只有兩層
- 里面的元素也全部是列表類(lèi)型
方式1:for循環(huán)
最容易想到的方式就是for循環(huán):
for i in data:
print(type(i))
<class 'list'> <class 'list'> <class 'list'> <class 'list'> <class 'list'>
# 導(dǎo)入Iterable 模塊
from collections import Iterable
sum_data = []
for i in data:
if isinstance(i,Iterable): # 如果可迭代(比如列表形式)
for j in i: # 再次循環(huán)追加元素
sum_data.append(j)
else:
sum_data.append(i) # 否則直接追加
sum_data
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
方式2:列表推導(dǎo)式
for循環(huán)能夠?qū)崿F(xiàn),那么列表推導(dǎo)式肯定也可以:
sum_data = [i for j in data if isinstance(j,Iterable) for i in j] # 循環(huán)一定是從大到小 sum_data
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
方式3:使用itertools庫(kù)
借助第三方的庫(kù)itertools:
import itertools # 通過(guò)chain方法從可迭代對(duì)象中生成;最后展開(kāi)成列表 sum_data = list(itertools.chain.from_iterable(data)) sum_data
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
方式4:使用sum函數(shù)
sum_data = sum(data, []) sum_data
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
方式5:Python自加
sum_data = []
for i in data:
sum_data += i # 實(shí)現(xiàn)自加
sum_data
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
方式6:extend函數(shù)
如何快速理解python的extend函數(shù),給個(gè)案例
# 如何理解python的extend函數(shù) list1 = [1,2,3,4] list1.extend([5,6]) # 追加功能extend;就地修改 list1 # list1已經(jīng)發(fā)生了變化
[1, 2, 3, 4, 5, 6]
sum_data = []
for i in data:
sum_data.extend(i) # 對(duì)空列表逐步追加
sum_data
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
方式7:使用遞歸函數(shù)
data
[[1, 2, 3], [4], [5, 6, 7], [8, 9], [10]]
def flatten(data): # 定義遞歸函數(shù)
sum_data = []
for i in data:
if isinstance(i, Iterable): # 如果i是可迭代的對(duì)象(列表等),調(diào)用函數(shù)本身;直到執(zhí)行else語(yǔ)句
sum_data.extend(flatten(i))
else:
sum_data.append(i)
return sum_data
sum_data = flatten(data) # 調(diào)用遞歸函數(shù) sum_data
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
后續(xù)
本文的數(shù)據(jù)有特殊點(diǎn):嵌套只有兩層,且里面的元素全部是列表;后面會(huì)考慮非全部列表的數(shù)據(jù)(比如列表和數(shù)字組合的嵌套列表等)和多層嵌套。
到此這篇關(guān)于Python實(shí)現(xiàn)嵌套列表的7中方法總結(jié)的文章就介紹到這了,更多相關(guān)Python嵌套列表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python的類(lèi)變量和成員變量用法實(shí)例教程
這篇文章主要介紹了python的類(lèi)變量和成員變量用法,是學(xué)習(xí)Python程序設(shè)計(jì)所必須牢固掌握的,需要的朋友可以參考下2014-08-08
解決Pycharm 包已經(jīng)下載,但是運(yùn)行代碼提示找不到模塊的問(wèn)題
今天小編就為大家分享一篇解決Pycharm 包已經(jīng)下載,但是運(yùn)行代碼提示找不到模塊的問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
使用tensorflow框架在Colab上跑通貓狗識(shí)別代碼
這篇文章主要介紹了使用tensorflow框架在Colab上跑通貓狗識(shí)別代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
python繪圖時(shí),坐標(biāo)軸負(fù)號(hào)顯示不出來(lái)的解決
這篇文章主要介紹了python繪圖時(shí),坐標(biāo)軸負(fù)號(hào)顯示不出來(lái)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Python樹(shù)的重建實(shí)現(xiàn)示例
樹(shù)的重建是一種從給定的遍歷序列中恢復(fù)原樹(shù)結(jié)構(gòu)的算法,本文就來(lái)介紹一下Python樹(shù)的重建實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
python應(yīng)用程序在windows下不出現(xiàn)cmd窗口的辦法
這篇文章主要介紹了python應(yīng)用程序在windows下不出現(xiàn)cmd窗口的辦法,適用于python寫(xiě)的GTK程序并用py2exe編譯的情況下,需要的朋友可以參考下2014-05-05
Pandas數(shù)據(jù)清洗函數(shù)總結(jié)
本文主要介紹了Pandas數(shù)據(jù)清洗函數(shù)總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Python處理字節(jié)串:struct.pack和struct.unpack使用
這篇文章主要介紹了Python處理字節(jié)串:struct.pack和struct.unpack使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
python實(shí)現(xiàn)字符串和數(shù)字拼接
今天小編就為大家分享一篇python實(shí)現(xiàn)字符串和數(shù)字拼接,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Python跨文件全局變量的實(shí)現(xiàn)方法示例
我們?cè)谑褂肞ython編寫(xiě)應(yīng)用的時(shí)候,有時(shí)候會(huì)遇到多個(gè)文件之間傳遞同一個(gè)全局變量的情況。所以下面這篇文章主要給大家介紹了關(guān)于Python跨文件全局變量的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-12-12

