首頁 後端開發 Python教學 Python中迭代器和列表解析怎麼使用?

Python中迭代器和列表解析怎麼使用?

Jul 17, 2017 am 09:47 AM
python 解析 迭代

迭代器:初探

上一章曾經提到過,其實for迴圈是可用於任何可迭代的物件上的。實際上,對於Python中所有會從左到右掃描物件的迭代工具而言都是如此,這些迭代工具包括了for循環、列表解析、in成員關係測試以及map內建函數等。

「可迭代物件」的概念在Python中是相當新穎的,基本這就是序列觀念的通用化:如果物件時實際保存的序列,或者可以再迭代工具環境中一次產生一個結果的物件,那就看做是可迭代的。

>>檔案迭代器
作為內建資料類型的檔案也是可迭代的,它有一個名為__next__的方法,每次呼叫時,就會返回文件中的下一行。當到達檔案末端時,__next__會引發內建的StopIteration異常,而不是傳回空字串。

這個介面就是Python中所謂的迭代協定:有__next__方法的物件會前進到下一個結果,而在一系列結果的結尾時,則會引發StopIteration。任何這類物件都認為是可迭代的。任何這類物件也能以for迴圈或其他迭代工具遍歷,因為所有迭代工具內部運作起來都是在每次迭代中呼叫__next__,並且捕捉StopIteratin異常來決定何時離開。

Python 迭代器與列表解析

1)迭代器

 一种特殊的数据结构,以对象形式存在
        >>> i1 = l1.__iter__()
        >>> i1 = iter(l1)
        可迭代对象:
            序列:      list、str、tuple
            非序列:     dict、file
            自定义类:  __iter__()、 __getitem__()
   注意:
         若要实现迭代器,需要在类中定义next()方法
         要使迭代器指向下一个对象,则使用成员函数 next() 
             i1.next()
         当没有元素时,会引发StopIteration异常
         for循环可用于任何可迭代对象
         
         例:   >>> l1 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
                >>> i1 = l1.__iter__()
                >>> il.next()
                'Sun' 
                >>> il.next()
                'Mon'
登入後複製

2)列表解析[ ]

根据已有列表,高效生产新列表的方式。 常用于实现创建新的列表,因此要放置于 [ ] 中
语法:
    [ expression for iter_var in iterable ]
    [ expression for iter_var in iterable if cond_expr ]

    os模块中  listdir() 能够列出所有文件
    例:事先定义l1 l2        l1 = [ 1,2,3,4,5 ]     l2=[ ]                
           >>>  for i in l1:
                   l2.append(i**2)                     l2列表内各项为l1的平方
           >>>  print l2
           [1, 4, 9, 16, 25]

            >>> l3 = [ i**2 for i in l1 ]               l3列表内各项为l1的平方
            [1, 4, 9, 16, 25]
          
            >>> l4 = [ i**2 for i in l1 if i>=3 ]       l3列表内各项为l1中 >= 3的平方
            [9, 16, 25]
            
     例题:  l1 = ['x','y','z']     l2 = [1,2,3]  应用列表解析方法使其各项相乘
            
            >>> l3 = [ (i,j) for  i in l1 for j in l2 ]     for循环内部嵌套一个for循环实现各项乘
            [('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
登入後複製

3)生成器( )

    惰性计算、延迟求值
    生成器表达式并不真正创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目产生出来(一次返回一个值)
    语法:
        ( expr for iter_var in iterable )
        ( expr for iter_var in iterable  if cond_expr )
    
     例:  >>> l1 = ( i**2 for i in range(2,11,2))
           >>> l1.next()
           2
           >>> l1 = ( i**2 for i in range(2,11) if i%2==0 )
           >>> l1.next()
           2
     注意:
        序列过长,并且每次只获取一个元素时,应当考虑使用生成器表达式而不是列表解析
        列表解析与生成器的关系相当于range()与xrange()
登入後複製

4)產生偏移和元素

    enumerate
    同时偏移缩印和偏移元素,使用enumerate()函数
    此内置函数返回一个生成器对象
    >>> S = 'Hello,world'
    >>> a = enumerate(S)
    >>> a.next()
    (0,'H')
    >>> a.next()
    (1,'e')
登入後複製

以上是Python中迭代器和列表解析怎麼使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles