python可迭代對象 怎么理解,python迭代器_使用Python的迭代器遍歷可迭代對象

 2023-10-04 阅读 28 评论 0

摘要:迭代器也是用來遍歷對象成員的,前面討論過使用for循環遍歷序列對象成員,為什么Python還要提供迭代器呢? 1、為什么要使用迭代器? 使用for循環可以遍歷序列對象,列表、元組、字符串都是序列對象,序列對象都有索引,通過索引可

迭代器也是用來遍歷對象成員的,前面討論過使用for循環遍歷序列對象成員,為什么Python還要提供迭代器呢?

1、為什么要使用迭代器?

使用for循環可以遍歷序列對象,列表、元組、字符串都是序列對象,序列對象都有索引,通過索引可以訪問序列對象的成員。在用for循環遍歷序列對象時,即可以使用序列對象的索引來遍歷,也可以使用序列項來遍歷,for循環使用序列項遍歷對象時,就用到了迭代器。另外,Python也有不是序列對象的數據,例如集合、字典、文件等,如何遍歷這些數據類型的成員呢,這也需要用到迭代器。

Python提供的迭代器是非常強大的,它不僅可以遍歷序列對象,也可以遍歷非序列對象,例如遍歷字典的所有鍵,集合的所有成員等等。迭代器本身提供了一個next方法,用于獲取下一個對象成員,當用next方法獲取全部成員后,再次調用next方法時,會引發StopIteration異常,這個異常不是錯誤,只是表示迭代已完成,因此使用迭代器迭代對象成員時,需要加入異常處理語句。

2、 哪些是可迭代對象?

迭代器提供了統一的訪問接口,只要實現了__iter__和__next__方法的對象,都屬于可迭代對象,可以使用迭代器進行迭代訪問。序列對象包括列表、元組和字符串;非序列對象包括字典、集合和文件;實現了__iter__和__next__方法的自定義對象也屬于可迭代對象。

例如:

u=2085328303,1752245592&fm=173&app=49&f=JPEG?w=640&h=170&s=0552ED324B6247245A55A0DA0000C0B3

上面的代碼定義了一個test類(關于Python類的知識,在后面的章節會有詳細介紹),test類實現了__iter__和__next__方法,屬于可迭代對象。for……in……循環語句實現對test類對象的迭代訪問,首先它通過__iter__方法獲得test類的迭代器,然后循環調用__next__方法獲得test對象,直至test類的data屬性大于5時停止迭代。

3、如何使用迭代器?

Python提供的iter()函數可以從可迭代對象中獲得該對象的迭代器,然后使用迭代器的next方法獲取對象。因為迭代器在迭代完所有對象成員后,會引發StopIteration異常,因此需要把迭代代碼放入到try-except塊中(異常處理語句,在后面的章節會有詳細介紹)。

例1:查找一個詞是否在給出的詞組中。

詞組是多個詞的組合,在詞組中查找一個詞,查找的詞為查詢詞。最好的處理方法就是遍歷整個詞組,依次與查詢詞進行匹配,匹配成功說明查詢詞出現在詞組中。程序流程圖如下:

u=2192232512,3986268220&fm=173&app=49&f=JPEG?w=554&h=299&s=798C34720B03644B0A75F1CA0000A0B1圖1 詞查詢流程圖

程序一開始先用列表初始化詞組,然后要求用戶輸入查詢詞,再使用迭代器迭代詞組列表,在詞組列表的迭代過程中,獲取每個詞對象,并與查詢詞進行匹配。若匹配成功,輸出匹配成功信息并執行break語句跳出迭代,程序結束;若匹配失敗則進入下一輪迭代。當迭代全部結束后,說明詞組中沒有與查詢詞相匹配的詞,輸出匹配失敗信息,程序結束。下面給出例1的程序代碼。

u=3030519441,3123121042&fm=173&app=49&f=JPEG?w=640&h=192&s=4FC0E4124F6245220EF43DDA000050B2

在Python語言,判斷兩字符串是否相等,可以使用“==”比較運算符進行判斷,也可以使用“in”成員運算符進行判斷,這兩種運算符都返回布爾值,可以用在if表達式中。“==”比較運算符主要用于判斷兩個字符串的內容是否相等;“in”成員運算符主要用于判斷兩個字符串的內存地址是否相等。

try-except是Python的異常處理語句,當需要Python捕獲異常代碼時,需要把認為可能會出現異常的代碼包括在try語句塊中,在程序執行時,如果try內語句發生錯誤就會拋出異常,except語句會捕獲異常,except語句塊內的代碼將會被執行,這樣就可以處理異常錯誤了。因為迭代器在迭代完所有對象成員后,會引發StopIteration異常,因此需要把迭代代碼放入到try-except塊中。

上面代碼的功能也可以使用for循環實現,使用for循環對詞組進行迭代,操作上更為簡單方便。

u=3571547440,395402004&fm=173&app=49&f=JPEG?w=640&h=162&s=EF40E01A4F6275204E7D3DDA000080B2

在for……in……循環中,序列對象列表會自動產生迭代器,并自動調用迭代器的next方法,因此不需要處理try-except語句。

例2:用字典實現圖書信息表,并能通過圖書的ISBN號查詢到圖書信息。

每本圖書都有唯一的ISBN號,可以把圖書的ISBN號作為圖書信息表的唯一標識。題目要求用字典來實現,字典分為key和value兩部分,key為鍵,value為鍵的屬性,key和value是一一對應的關系。圖書的ISBN可以作為字典的key,圖書的其它信息可以作為字典的value,圖書的其它信息包括圖書名稱、作者、出版社、價格,字典的value可以用Python列表來實現。程序流程圖如下:

u=1977423777,147430251&fm=173&app=49&f=JPEG?w=554&h=298&s=798C34721B0B644D0A55D5CA0000E0B1圖 2 圖書信息查詢流程圖

程序一開始先初始化圖書信息字典,字典的key為圖書的ISBN號,字典的value為圖書的名稱、作者、出版社、價格信息,value為Python列表對象。然后要求用戶輸入圖書的ISBN號,再使用迭代器遍歷字典的key,在遍歷字典key的過程中,如果輸入的ISBN與key匹配,則輸出圖書信息并執行break語句跳出迭代,程序結束。當迭代全部完成后,輸出匹配失敗信息,程序結束。下面給出例2的程序代碼。

u=3752381196,3339209111&fm=173&app=49&f=JPEG?w=640&h=221&s=EEC0F51A93745C23047839D90000D0B2

使用Python提供的iter函數獲取字典key的迭代器,在字典key的迭代過程中,next函數返回key的值。bookDic使用“[]”訪問運算符可以把key作為索引獲取字典的value。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/112076.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息