日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【Python学习教程】推导式与生成器

發(fā)布時(shí)間:2025/3/20 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python学习教程】推导式与生成器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

當(dāng)我們對(duì)一批可迭代的數(shù)據(jù)(如列表或字典)進(jìn)行提取或處理,最后要得到一個(gè)新的列表或字典時(shí),推導(dǎo)式是一種非常簡潔的表達(dá)方式。

列表推導(dǎo)式

比如,有一批數(shù)據(jù)

data = [{'name': '張三', 'gender': 'male', 'age': 12},{'name': '李四', 'gender': 'female', 'age': 10},{'name': '王五', 'gender': 'male', 'age': 20},{'name': '趙六', 'gender': 'male', 'age': 11},{'name': '周七', 'gender': 'female', 'age': 16},{'name': '孫八', 'gender': 'male', 'age': 13}, ]

我們想要把數(shù)據(jù)中的name都提取出來形成一個(gè)新的列表,一般的操作是這樣的。

names = [] # 定義一個(gè)空列表for item in data: # 遍歷數(shù)據(jù)name = item['name'] # 提取每行中的namenames.append(name) # 追加到列表中

如果用推導(dǎo)式的話,形式如下。

names = [item['name'] for item in data] # 遍歷data,提取每項(xiàng)中的name生成一個(gè)新列表

數(shù)據(jù)處理

在提取數(shù)據(jù)時(shí),我們還可以對(duì)每一項(xiàng)數(shù)據(jù)進(jìn)行,處理,假設(shè)我們需要每個(gè)名稱前加上’姓名: '這個(gè)字符串,可以這樣。

names = ['姓名: '+item['name'] for item in data]

'姓名: '+item[‘name’] 就是每一項(xiàng)的數(shù)據(jù)

數(shù)據(jù)篩選

同樣我們還可以對(duì)數(shù)據(jù)進(jìn)行篩選,比如我們只要年齡大于12歲,后面可以使用if進(jìn)行過濾

names = [item['name'] for item in data if item['age']>12]

多重循環(huán)

推導(dǎo)式還支持多重循環(huán),比如

''' 學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' for x in range(1,5)if x > 2for y in range(1,4)if y < 3x*y

使用推導(dǎo)式表示如下

[x*y for x in range(1,5) if x > 2 for y in range(1,4) if y < 3]

批量執(zhí)行操作

由于推導(dǎo)式就是一種循環(huán)操作,我們也可以使用推導(dǎo)式來批量執(zhí)行一些相似操作,比如:

def step1(driver):print('步驟1)def step2(driver):print('步驟2)def step3(driver):print('步驟3)

我們可以將函數(shù)名放到一個(gè)列表里,然后使用推導(dǎo)式循環(huán)執(zhí)行

steps = [step1, step2, step3] # 函數(shù)名列表[step(driver) for step in steps] # 不需要變量接收,我們只需要它循環(huán)執(zhí)行

字典推導(dǎo)式

當(dāng)我們需要遍歷一批數(shù)據(jù)最后得到一個(gè)字典時(shí),同樣可以使用字典推導(dǎo)式,如:

''' 學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' data = [{'name': '張三', 'gender': 'male', 'age': 12},{'name': '李四', 'gender': 'female', 'age': 10},{'name': '王五', 'gender': 'male', 'age': 20},{'name': '趙六', 'gender': 'male', 'age': 11},{'name': '周七', 'gender': 'female', 'age': 16},{'name': '孫八', 'gender': 'male', 'age': 13}, ]

假設(shè)我們想得到一個(gè){‘張三’: 12, ‘李四’: 10, …}這樣的一個(gè)字典,使用字典推導(dǎo)式方式如下:

persons = {item['name']: item['age'] for item in data}

字典推導(dǎo)式同樣支持if篩選等操作。

生成器

生成器實(shí)際上是一種包含初始數(shù)據(jù)和推導(dǎo)法則的對(duì)象,比如我們可以輕松的寫出1w以內(nèi)所有的奇數(shù),原因是因?yàn)槲抑恍枰涀?開始每次加2即可。

生成器便是這樣。對(duì)應(yīng)大量的數(shù)據(jù)或者CSV/Excel文件中的數(shù)據(jù),生成器可以大量的節(jié)省內(nèi)存,比如csv.Reader(f)就是一個(gè)生成器,只存了當(dāng)前位置和讀取下一行數(shù)據(jù)的方法。

當(dāng)你需要遍歷時(shí),它再每次給你讀取一行數(shù)據(jù)給你。
如列表推導(dǎo)式的例子,

data = [{'name': '張三', 'gender': 'male', 'age': 12},{'name': '李四', 'gender': 'female', 'age': 10},{'name': '王五', 'gender': 'male', 'age': 20},{'name': '趙六', 'gender': 'male', 'age': 11},{'name': '周七', 'gender': 'female', 'age': 16},{'name': '孫八', 'gender': 'male', 'age': 13}, ] names = [item['name'] for item in data]

我們把列表的中括號(hào)改為小括號(hào)就得到一個(gè)生成器

names2 = (item['name'] for item in data)

注意:生成器和推導(dǎo)式不同,其中的循環(huán)不是立即執(zhí)行的,只用你遍歷這個(gè)生成器時(shí)才會(huì)執(zhí)行

''' 學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' for name in names: # 遍歷列表推導(dǎo)式生成的新列表print(name)for name in names2: # 遍歷一個(gè)生成器print(name)

兩個(gè)打印結(jié)果是一樣的,生成器更節(jié)省內(nèi)存,只有遍歷時(shí)才運(yùn)行。

總結(jié)

以上是生活随笔為你收集整理的【Python学习教程】推导式与生成器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。