Python復(fù)合列表的遍歷方法
在這篇文章中,我們將學(xué)習(xí)如何遍歷 Python 中復(fù)合列表。Python 中的列表非常靈活,通過將新列表充當(dāng)元素保存到列表中的方式,可以任意組合出及其復(fù)雜的樹形結(jié)構(gòu)。 編寫代碼首先,我們需要啟動(dòng)已安裝
在這篇文章中,我們將學(xué)習(xí)如何遍歷 Python 中復(fù)合列表。Python 中的列表非常靈活,通過將新列表充當(dāng)元素保存到列表中的方式,可以任意組合出及其復(fù)雜的樹形結(jié)構(gòu)。
編寫代碼
首先,我們需要啟動(dòng)已安裝的 Python IDLE 程序,然后點(diǎn)擊菜單欄上的 “File > New File” 新建一個(gè) Python 源代碼文件(由 Python 內(nèi)置的文本編輯器打開)。
在新打開的代碼編輯窗口中,編寫一段遍歷輸出一維列表中所有元素的代碼。為了指明輸出的內(nèi)容是什么,可以在輸出列表元素之前寫上一條打印語句。
我們可以通過內(nèi)置函數(shù) `print()` 輸出復(fù)合列表的值,并盡可能多套幾層,增加遍歷的難度。
執(zhí)行代碼
代碼編寫完畢后,點(diǎn)擊菜單欄上的 “File > Save”(或者 Ctrl S)保存新建的源代碼文件(記得取一個(gè)有意義的名字并存放在容易找到的位置)。
保存完代碼之后,可以通過菜單欄上的 “Run > Check Module”(或者 ALT X)執(zhí)行代碼檢查,如果代碼有語法錯(cuò)誤,它會(huì)彈出錯(cuò)誤提示,并用紅色標(biāo)記出源代碼中的出錯(cuò)位置。如果沒有問題,則什么也不會(huì)發(fā)生。
執(zhí)行代碼語法檢查后,點(diǎn)擊菜單欄上的 “Run > Run Module”(或 F5),運(yùn)行編輯器中的 Python 代碼。執(zhí)行完畢后,可以在 Python Shell 中見到輸出的內(nèi)容。
遍歷復(fù)合列表
我們可以寫一個(gè)遍歷復(fù)合列表的 循環(huán),將其中的所有元素輸出。寫完代碼后執(zhí)行。查看 Shell 中的輸出,發(fā)現(xiàn)其中仍然有子列表的元素沒有遍歷到。
為了遍歷列表中的列表元素,可以通過內(nèi)置函數(shù) `isinstance()` 判斷列表中的元素是否是一個(gè)列表。如果是,則繼續(xù)用 `` 循環(huán)遍歷其中的元素。不是,則直接輸出。修改遍歷復(fù)合列表的代碼,增加遍歷列表元素的代碼。寫完代碼后,按 F5 運(yùn)行代碼。查看 Shell 中的輸出內(nèi)容,發(fā)現(xiàn)第 1 級(jí)列表中的子列表元素已經(jīng)可以正常輸出了。
為了遍歷更多層的子列表元素,繼續(xù)向代碼中添加更多的 `if` 和 `` 語句。寫好代碼后,繼續(xù)按 F5 運(yùn)行。查看 Shell 中的輸入,發(fā)現(xiàn)總共寫了 3 層 `` 循環(huán)后,已經(jīng)可以遍歷復(fù)合列表中的所有元素了??墒牵绻斜韺哟卧俣嘁恍?,難道要繼續(xù)寫內(nèi)層的處理循環(huán)嗎?
遞歸實(shí)現(xiàn)
仔細(xì)觀察 `if` 和 `` 嵌套的代碼,發(fā)現(xiàn)它符合某種模式。這種模式似乎可以用遞歸來實(shí)現(xiàn)。而且遞歸可以支持無限層次的列表嵌套。根據(jù)之前的復(fù)合列表遍歷代碼,定義一個(gè)打印列表元素的 `printList()` 函數(shù),然后調(diào)用該函數(shù)打印復(fù)合列表中的元素。
為了讓打印的列表看上去更加直觀,可以根據(jù)列表的級(jí)別,添加指定數(shù)量的 ‘-’ 字符。根據(jù)這一想法,可以實(shí)現(xiàn)一個(gè)改進(jìn)版的 `printList2()` 函數(shù)。然后執(zhí)行 F5 測(cè)試一下。OK,輸出很正常。
測(cè)試函數(shù)
我們可以再寫個(gè)測(cè)試函數(shù)測(cè)試一下。
```python
def test():
composite [1, [2, [3, 4], 5], [6, 7], 8]
printList(composite)
```
增加自定義間隔
為了讓用戶能夠自定義間隔增長(zhǎng)的參數(shù),我們可以再次改進(jìn)代碼,實(shí)現(xiàn) `printList3()` 函數(shù)。
```python
def printList3(lst, level0, interval4):
'''自定義間隔增長(zhǎng)的復(fù)合列表打印函數(shù)'''
for i in lst:
if isinstance(i, list):
printList3(i, level interval, interval)
else:
print('-' * level, i)
```
然后運(yùn)行測(cè)試一下,傳入不同的參數(shù)并運(yùn)行代碼。OK,一切正常!
結(jié)論
通過本文的學(xué)習(xí),我們了解了 Python 復(fù)合列表的遍歷方法。我們可以通過 `` 循環(huán)和遞歸來遍歷列表中的所有元素,并且可以通過自定義函數(shù)的參數(shù)來控制輸出格式。