亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

廖雪峰Python教程筆記(四)

系統 1889 0

廖雪峰Python教程筆記(四)

  • 6 高級特性
    • 切片slice
    • 迭代
    • 列表生成式
    • 生成器
    • 迭代器

6 高級特性

在Python中,代碼不是越多越好,而是越少越好。代碼不是越復雜越好,而是越簡單越好。
基于這一思想,我們來介紹Python中非常有用的高級特性,1行代碼能實現的功能,決不寫5行代碼。請始終牢記, 代碼越少,開發效率越高

切片slice

經常取指定索引范圍的操作,用循環十分繁瑣,因此,Python提供了切片(Slice)操作符
取前3個元素,用一行代碼就可以完成切片:
在這里插入圖片描述
L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素。如果第一個索引是0,還可以省略: L[:3]

同樣支持倒數切片,試試:

在這里插入圖片描述
創建一個list從0到99
在這里插入圖片描述
廖雪峰Python教程筆記(四)_第1張圖片
在這里插入圖片描述
廖雪峰Python教程筆記(四)_第2張圖片

迭代

如果給定一個list或tuple,我們可以通過for循環來遍歷這個list或tuple,這種遍歷我們稱為迭代(Iteration)。
Python中,迭代是通過for … in來完成 的,而很多語言比如C語言,迭代list是 通過下標 完成的

Python的for循環不僅可以用在list或tuple上,還可以作用在其他可迭代對象上。
只要是可迭代對象,無論有無下標,都可以迭代,比如dict就可以迭代:
廖雪峰Python教程筆記(四)_第3張圖片
因為dict的存儲不是按照list的方式順序排列,所以,迭代出的結果順序很可能不一樣。

默認情況下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),

如果要同時迭代key和value,可以用for k, v in d.items()。

那么,如何判斷一個對象是可迭代對象呢?方法是通過collections模塊的Iterable類型判斷:
廖雪峰Python教程筆記(四)_第4張圖片
Python內置的enumerate函數可以把一個list變成索引-元素對,這樣就可以在for循環中同時迭代索引和元素本身:
廖雪峰Python教程筆記(四)_第5張圖片
廖雪峰Python教程筆記(四)_第6張圖片

任何可迭代對象都可以作用于for循環,包括我們自定義的數據類型,只要符合迭代條件,就可以使用for循環。

列表生成式

列表生成式即List Comprehensions,是Python內置的非常簡單卻強大的 可以用來創建list的生成式。
要生成[1x1, 2x2, 3x3, …, 10x10]怎么做?
廖雪峰Python教程筆記(四)_第7張圖片
而列表生成式則可以用一行語句代替循環生成上面的list:
在這里插入圖片描述
for循環后面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:
在這里插入圖片描述
還可以使用兩層循環,可以生成全排列:
在這里插入圖片描述
例如,列出當前目錄下的所有文件和目錄名,可以通過一行代碼實現。

生成器

這種一邊循環一邊計算的機制,稱為生成器:generator。
要創建一個generator,有很多種方法。第一種方法很簡單,只要把一個列表生成式的[]改成(),就創建了一個generator:
廖雪峰Python教程筆記(四)_第8張圖片
創建L和g的區別僅在于最外層的[]和(),L是一個list,而g是一個generator。

我們可以直接打印出list的每一個元素,但我們怎么打印出generator的每一個元素呢?

如果要一個一個打印出來,可以 通過next()函數獲得generator的下一個返回值
在這里插入圖片描述
正確的方法是使用for循環,因為generator也是可迭代對象:
在這里插入圖片描述

迭代器

可以直接作用于for循環的數據類型有以下幾種:

一類是集合數據類型,如list、tuple、dict、set、str等;
一類是generator,包括生成器和帶yield的generator function。

可以直接作用于for循環的對象統稱為可迭代對象:Iterable。

可以使用isinstance()判斷一個對象是否是Iterable對象:
廖雪峰Python教程筆記(四)_第9張圖片
而生成器不但可以作用于for循環,還可以被next()函數不斷調用并返回下一個值,直到最后拋出StopIteration錯誤表示無法繼續返回下一個值了。

可以被next()函數調用并不斷返回下一個值的對象稱為迭代器:Iterator

可以使用isinstance()判斷一個對象是否是Iterator對象:
廖雪峰Python教程筆記(四)_第10張圖片
生成器都是Iterator對象,但list、dict、str雖然是Iterable,卻不是Iterator。

生成器都是Iterator對象,但list、dict、str雖然是Iterable,卻不是Iterator。
在這里插入圖片描述

Python的Iterator對象表示的是一個數據流,Iterator對象可以被next()函數調用并不斷返回下一個數據,直到沒有數據時拋出StopIteration錯誤。可以把這個數據流看做是一個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函數實現按需計算下一個數據,所以Iterator的計算是惰性的,只有在需要返回下一個數據時它才會計算。

Iterator甚至可以表示一個無限大的數據流,例如全體自然數。而使用list是永遠不可能存儲全體自然數的。

小結
凡是可作用于for循環的對象都是Iterable類型;
凡是可作用于next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列;
集合數據類型如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函數獲得一個Iterator對象。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费人成在线观看网站 | 国产精品欧美一区二区三区不卡 | 国产日韩欧美在线观看免费视频 | 好吊妞视频998www| 我要看免费毛片 | 国产亚洲精品线观看77 | 9984四虎永久免费网站 | 精品日韩在线视频一区二区三区 | 免费两性的视频网站 | 欧美一级毛片免费大全 | 国产乱子伦视频大全 | 欧美毛片性视频区 | 久久久免费观看视频 | 拍拍拍无挡视频免费观看1000 | 91成人爽a毛片一区二区 | 欧美精品色视频 | 精品久久网站 | 色多网站免费视频 | 欧美日本高清动作片www网站 | 国产欧美亚洲三区久在线观看 | 亚洲国产欧美日韩一区二区三区 | 国产一区二区三区不卡在线观看 | 亚洲视频手机在线 | 曰本一级毛片 | 欧美视频三区 | 在线观看中文字幕 | 狠狠色丁香婷婷久久综合考虑 | 欧美日韩综合视频 | 亚洲性视频网站 | 日日躁夜夜躁狠狠天天 | 一区两区三不卡 | 免费一级特黄 | www.五月天激情 | 免费观看性欧美一级 | oldwoman中国老女人tv | 久久一| 亚洲麻豆视频 | 久久国产国内精品对话对白 | 久久机热re这里只有精品15 | 蜜桃久久 | 久久精品国产亚洲麻豆 |