概念層面:
????????可迭代對象:
一個可迭代對象是指任何可以返回一個迭代器的對象。換句話說,它實現了 __iter__()
方法
比如:列表、元組、字典、字符串、集合等
直接通過 for 循環使用,因為?for 循環內部會調用其 __iter__() 方法來獲取一個迭代器。
? ? ? ? 迭代器:
迭代器是一個對象,它封裝了遍歷數據的過程。迭代器對象必須實現兩個方法:
-
__iter__()
:返回自身,用于支持迭代器協議。 -
__next__()
:返回下一個元素;當沒有元素時會拋出StopIteration
異常。
my_list = [1, 2, 3, 4]
it = iter(my_list) # 將列表轉換為迭代器
print(next(it)) # 輸出 1
print(next(it)) # 輸出 2
代碼層面:
????????迭代器:
import sysdef main():# 讀取二進制輸入并解碼(假設為 UTF-8 編碼)data = sys.stdin.buffer.read().decode('utf-8').split()it = iter(data) # t = int(next(it))res = []for _ in range(t):a = int(next(it))b = int(next(it))res.append(str(a + b))# 輸出前先編碼成二進制sys.stdout.buffer.write("\n".join(res).encode('utf-8'))if __name__ == '__main__':main()
????????可迭代對象:
import sysdef main():# 讀取二進制輸入并解碼(假設為 UTF-8 編碼)data = sys.stdin.buffer.read().decode('utf-8').split()# 第一個元素是測試用例數 tt = int(data[0])res = []# 后續的數字按照成對順序排列,第 i 個測試用例對應 data[1 + i*2] 和 data[1 + i*2 + 1]for i in range(t):a = int(data[1 + i * 2])b = int(data[1 + i * 2 + 1])res.append(str(a + b))# 輸出前先編碼成二進制sys.stdout.buffer.write("\n".join(res).encode('utf-8'))if __name__ == '__main__':main()
兩者之間的關系
-
轉換關系:
每個可迭代對象都可以通過內置函數iter()
轉換為一個迭代器。這意味著當你對一個可迭代對象使用iter()
時,它返回的是一個能依次產生該對象中所有元素的迭代器 -
迭代過程:
當你在for
循環中遍歷一個可迭代對象時,實際上是調用了這個對象的__iter__()
方法,返回一個迭代器,然后不斷調用迭代器的__next__()
方法來獲取元素,直到遇到?StopIteration
異常為止
-
簡化理解:
-
可迭代對象 就像一個“容器”,里面裝著很多數據。
-
迭代器 則是一個“指針”或“工具”,用來逐個取出容器中的數據。
-