【Python学习教程】推导式与生成器
當我們對一批可迭代的數據(如列表或字典)進行提取或處理,最后要得到一個新的列表或字典時,推導式是一種非常簡潔的表達方式。
列表推導式
比如,有一批數據
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}, ]我們想要把數據中的name都提取出來形成一個新的列表,一般的操作是這樣的。
names = [] # 定義一個空列表for item in data: # 遍歷數據name = item['name'] # 提取每行中的namenames.append(name) # 追加到列表中如果用推導式的話,形式如下。
names = [item['name'] for item in data] # 遍歷data,提取每項中的name生成一個新列表數據處理
在提取數據時,我們還可以對每一項數據進行,處理,假設我們需要每個名稱前加上’姓名: '這個字符串,可以這樣。
names = ['姓名: '+item['name'] for item in data]'姓名: '+item[‘name’] 就是每一項的數據
數據篩選
同樣我們還可以對數據進行篩選,比如我們只要年齡大于12歲,后面可以使用if進行過濾
names = [item['name'] for item in data if item['age']>12]多重循環
推導式還支持多重循環,比如
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' for x in range(1,5)if x > 2for y in range(1,4)if y < 3x*y使用推導式表示如下
[x*y for x in range(1,5) if x > 2 for y in range(1,4) if y < 3]批量執行操作
由于推導式就是一種循環操作,我們也可以使用推導式來批量執行一些相似操作,比如:
def step1(driver):print('步驟1)def step2(driver):print('步驟2)def step3(driver):print('步驟3)我們可以將函數名放到一個列表里,然后使用推導式循環執行
steps = [step1, step2, step3] # 函數名列表[step(driver) for step in steps] # 不需要變量接收,我們只需要它循環執行字典推導式
當我們需要遍歷一批數據最后得到一個字典時,同樣可以使用字典推導式,如:
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和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}, ]假設我們想得到一個{‘張三’: 12, ‘李四’: 10, …}這樣的一個字典,使用字典推導式方式如下:
persons = {item['name']: item['age'] for item in data}字典推導式同樣支持if篩選等操作。
生成器
生成器實際上是一種包含初始數據和推導法則的對象,比如我們可以輕松的寫出1w以內所有的奇數,原因是因為我只需要記住從1開始每次加2即可。
生成器便是這樣。對應大量的數據或者CSV/Excel文件中的數據,生成器可以大量的節省內存,比如csv.Reader(f)就是一個生成器,只存了當前位置和讀取下一行數據的方法。
當你需要遍歷時,它再每次給你讀取一行數據給你。
如列表推導式的例子,
我們把列表的中括號改為小括號就得到一個生成器
names2 = (item['name'] for item in data)注意:生成器和推導式不同,其中的循環不是立即執行的,只用你遍歷這個生成器時才會執行
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' for name in names: # 遍歷列表推導式生成的新列表print(name)for name in names2: # 遍歷一個生成器print(name)兩個打印結果是一樣的,生成器更節省內存,只有遍歷時才運行。
總結
以上是生活随笔為你收集整理的【Python学习教程】推导式与生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python教程】读写ini配置文件的
- 下一篇: 【Python学习教程】:装饰器的详细教