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