迭代器與可迭代對象

概念層面:

????????可迭代對象:

一個可迭代對象是指任何可以返回一個迭代器的對象。換句話說,它實現了 __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 異常為止

  • 簡化理解

    • 可迭代對象 就像一個“容器”,里面裝著很多數據。

    • 迭代器 則是一個“指針”或“工具”,用來逐個取出容器中的數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899472.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

總結PostgreSQL創建數據庫失敗的解決辦法

作者:朱金燦 來源:clever101的專欄 系統環境是Windows 11 專業版,PostgreSQL版本是17。在運行sql語句創建數據庫時出現錯誤: 閿欒: template database \"template1\" has a collation version mismatch DETAIL: Th…

Mybatis源碼 插件機制

簡介 插件是一種常見的擴展方式,大多數開源框架也都支持用戶通過添加自定義插件的方式來擴展或者改變原有的功能,MyBatis中也提供的有插件,雖然叫插件,但是實際上是通過攔截器(Interceptor)實現的,在MyBatis的插件模塊…

Android14 SystemUI中添加第三方AIDL

由于特殊需求,需要在SystemUI中添加第三方AIDL,去做一些客制化的修改。現在記錄一下AIDL添加的過程。 1.將AIDL文件拷貝到frameworks/base/packages/SystemUI/src/下,我要添加的AIDL文件是com/test/myctr/IDevicectr.aidl,添加后的…

Binlog、Redo log、Undo log的區別

一、binlog和redo log的區別 特性binlogredo log記錄對象記錄的是 MySQL 服務器的事務操作,針對的是整個數據庫實例。記錄的是 InnoDB 存儲引擎的數據頁變化,針對的是具體的存儲引擎層面。記錄內容記錄的是事務的邏輯操作,例如 SQL 語句&…

TDengine 中的異常恢復

簡介 本章主要介紹在 TDengine 執行命令過程中發生異常,如何手工終于執行的任務。可以終止連接,線上查詢及終止事務。 如果一個事務 在一個復雜的應用場景中,連接和查詢任務等有可能進入一種錯誤狀態或者耗時過長遲遲無法結束,…

全球化2.0 | ZStack舉辦香港Partner Day,推動AIOS智塔+DeepSeek海外實踐

2025年3月21日,云軸科技ZStack在香港成功舉辦了主題為“ZStack AIOS 智塔與 DeepSeek 私有化方案介紹及企業應用落地實踐”的 Partner Day 活動。此次活動吸引了眾多海外合作伙伴,共同探討 AI Infra 平臺在企業私有化 AI 中的應用與價值閉環。 ZStack CT…

ERP、MES和CRM三大企業系統的詳細介紹及對比分析

以下是關于ERP、MES和CRM三大企業系統的詳細介紹及對比分析: 1. ERP(企業資源計劃,Enterprise Resource Planning) 核心功能: 集成管理:財務、采購、庫存、生產、人力資源等核心業務流程資源優化&#xf…

(二十)Dart 中的多態

Dart 中的多態教程 一、多態的概念 多態是面向對象編程中的一個重要概念。它允許將子類類型的指針賦值給父類類型的指針,同一個函數調用會有不同的執行效果。換句話說,子類的實例可以賦值給父類的引用。多態的核心在于父類定義一個方法不去實現&#x…

【C++初階】第12課—list

文章目錄 1. list的構造2. list迭代器的常見接口2.1 list遍歷的迭代器接口2.2 list修改數據的迭代器接口2.3 list排序、逆序、合并相關操作的成員函數 3. 模擬實現list3.1 模擬實現list的構造3.2 模擬實現list的尾插3.3 模擬實現迭代器iterator3.4 模擬實現list的插入刪除3.5 模…

思維鏈技術(Chain-of-Thought, CoT)

思維鏈(Chain-of-Thought, CoT)是一種通過模擬人類逐步推理過程來提升大型語言模型(LLM)復雜任務表現的技術。其核心思想是讓模型在生成最終答案前,先輸出中間推理步驟,從而增強邏輯性和可解釋性。 1. 基礎…

谷粒微服務高級篇學習筆記整理---異步線程池

多線程回顧 多線程實現的4種方式 1. 繼承 Thread 類 通過繼承 Thread 類并重寫 run() 方法實現多線程。 public class MyThread extends Thread {Overridepublic void run() {System.out.println("線程運行: " Thread.currentThread().getName());} }// 使用 pub…

Windows學習筆記(4)關于MITRE

基本術語 APT(威脅組,高級持續威脅) TTP(攻擊目的技術過程,戰術技術和程序) ATT&CK框架 網站 https://attack.mitre.org/ CAR知識庫 MITRE Engage MITRE D3FEND 網址 https://d3fend.mitre.org/

Go 語言規范學習(2)

文章目錄 VariablesTypesBoolean typesNumeric typesString typesArray typesSlice typesStruct typesPointer typesFunction typesInterface typesBasic interfacesEmbedded interfacesGeneral interfaces【泛型接口】Implementing an interface【實現一個接口】 Map typesCha…

創意 Python 愛心代碼分享

創意 Python 愛心代碼分享 在編程中,用代碼表達創意和情感是一種非常有趣的方式。本文將分享幾段用 Python 編寫的愛心代碼,涵蓋簡單到復雜的實現方式,適合初學者和進階開發者。 1. 簡單愛心圖案 代碼實現 print("\n".join([&qu…

NLP高頻面試題(二十四)——RAG相關內容簡介

檢索增強生成(Retrieval-Augmented Generation,簡稱 RAG)是一種將信息檢索與生成模型相結合的技術,旨在提升大型語言模型的響應準確性、相關性和時效性。通過在生成過程中引入外部知識,RAG 能夠有效彌補 LLM 在知識局限…

Share01-WinCC文件越用越大?

為什么你們的經典WinCC項目在客戶電腦上運行的越來越慢?為什么查詢一個歷史曲線慢的要死?為什么重啟一下電腦畫面都要懷疑人生?具體原因可能多種多樣,但是極大可能是您的數據管理設置欠佳,那么閑話少敘,和小…

練習題:111

目錄 Python題目 題目 題目分析 需求理解 關鍵知識點 實現思路分析 代碼實現 代碼解釋 指定文件路徑和名稱: 定義要寫入的內容: 打開文件并寫入內容: 異常處理: 輸出提示信息: 運行思路 結束語 Python題…

2025_0327_生活記錄

昨晚正在玩手機,凌晨一點二十一分左右手機突然響起來,通知地震波將在5秒后到達海淀區。看著倒計時的數字不斷減小,橙色預警頁面不斷閃動,床猛地搖了幾下。那一刻,我的記憶被拉回了2008年。 上大學之前我在成都生活了1…

基于改進粒子群算法的多目標分布式電源選址定容規劃(附帶Matlab代碼)

通過分析分布式電源對配電網的影響,以有功功率損耗、電壓質量及分布式電源總容量為優化目標,基于模糊理論建立了分布式電源在配電網中選址定容的多目標優化模型,并提出了一種改進粒子群算法進行求解。在算例仿真中,基于IEEE-14標準…

雨云云應用測評!內測持續進行中!

大家好,時隔一個月,我們又見面了! 最近,雨云推出了新型云應用(RCA,Rainyun Cloud Application)。 通過云應用,你可以快速創建可以外部訪問的應用,采用全新的面板和dock…