Python 列表推導式 - Python零基礎入門教程


目錄

零基礎 Python 學習路線推薦 : Python 學習目錄 >> Python 基礎入門

一.Python 列表推導式簡介

上一篇文章中我們介紹了 Python 條件推導式實際上就是把多行代碼合並為一行代碼的操作,使用列表推導式可以讓程序的運行效率更高(文章末尾有具體講解),其實列表推導式其實和條件推導式類似;

Python 列表推導式是從一個或者多個迭代器快速簡潔地創建數據類型的一種方法,它將循環和條件判斷結合,從而避免語法冗長的代碼,提高代碼運行效率能熟練使用推導式也可以間接說明你已經超越了 Python 初學者的水平**。**

Python 推導式相關:

二.Python 列表推導式語法

列表推導式是條件推導式和循環一起配合使用,並返回一個列表 list,並且整個表達式需要在[]內,因為返回值也是列表 list。

'''
語法一:
    exp1:在for循環中,如果x的值滿足條件表達式condition(即條件表達式成立),返回exp1;條件表達式不成立則不返回
    x:for循環中變量
    data:一個序列(比如:列表/元組/字符串等)
    condition:條件表達式
'''

[exp1 for x in data if condition]

'''
語法二:
    exp1:在for循環中,如果x的值滿足條件表達式condition(即條件表達式成立),返回exp1;條件表達式不成立則返回exp2
    condition:條件表達式
    exp2:在for循環中,如果x的值滿足條件表達式condition(即條件表達式成立),返回exp1;條件表達式不成立則返回exp2
    x:for循環中變量
    data:個序列(比如:列表/元組/字符串等)

'''

[exp1 if condition else exp2 for x in data]

三.Python 列表推導式練習

1.Python 列表推導式案例一

獲取 0 ~ 20 的所有偶數並且乘以 10,並返回所有計算之后的結果。示例代碼如下:(使用 Python 列表推導式語法一實現)

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說編程
@Blog(個人博客地址): www.codersrc.com
@File:Python Python 列表推導式.py
@Time:2021/3/27 08:00
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!

"""

'''
1.因為是獲取0~20,包括20,所以使用range(0,21)
2.x*10 等價 語法一中的exp1
3.x%2 == 0 等價 語法一中的條件表達式condition
4.range(0,21) 等價 語法一中的data(序列)
'''

list1 = [x*10 for x in range(0,21) if x%2 == 0]
print(list1)
print(type(list1))

'''
輸出結果:
[0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200]
<class 'list'>

'''

2.Python 列表推導式案例二

將 0 ~ 20 的偶數乘以 10 ,奇數乘以 100 ,並返回所有計算之后的結果。示例代碼如下:(使用 Python 列表推導式語法二實現

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說編程
@Blog(個人博客地址): www.codersrc.com
@File:Python Python 列表推導式.py
@Time:2021/3/27 08:00
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!

"""

'''
1.因為是獲取0~20,包括20,所以使用range(0,21)
2.x*10 等價 語法二中的exp1
3.x*100 等價 語法二中的exp2
4.x%2 == 0 等價 語法二中的條件表達式condition
5.range(0,21) 等價 語法一中的data(序列)
'''

list2 = [x*10 if x%2 == 0 else x*100 for x in range(0,21) ]
print(list2)
print(type(list2))

'''
輸出結果:
[0, 100, 20, 300, 40, 500, 60, 700, 80, 900, 100, 1100, 120, 1300, 140, 1500, 160, 1700, 180, 1900, 200]
<class 'list'>

'''

3.Python 列表推導式和循環效率對比

可能有童鞋納悶,我明明 for 循環 或者 while 循環就能實現的功能,為毛要用這鳥玩意推導式?

使用列表推導式的效率遠遠高於 for 循環,可能執行一句 print(“helloworld”) 對於 cpu 而已只需要 0.0002 秒,你可能感覺不到差距,如果需要輸出一億次 helloworld 呢?往往細節覺得成敗!

假如有一個需求:將 0 ~ 10000000 (一億)以內的所有整數存到列表中,對比一下 Python 列表推導式 和 for 循環耗時情況:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說編程
@Blog(個人博客地址): www.codersrc.com
@File:Python Python 列表推導式.py
@Time:2021/3/27 08:00
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!

"""

import time # 添加time模塊,用於統計代碼運行時間

#一共添加10000000次數據到列表中
total_num = 10000000

#使用列表推導式
start_time = time.time()
list1 = [x for x in range(0,total_num)] # 列表推導式
end_time = time.time()
print("使用列表推導式耗時:{}秒".format(end_time-start_time))

#使用普通for循環
start_time = time.time()
list2 = list()
for x in range(0,total_num): # for循環
    list2.append(x)
end_time = time.time()
print("使用普通for循環耗時:{}秒".format(end_time-start_time))

'''
輸出結果:
使用列表推導式耗時:0.5455152988433838秒
使用普通for循環耗時:1.2068836688995361秒
'''

輸出結果很明顯,實現通用的功能,Python 列表推導式的效率整整高出普通 for 循環一倍。

最后溫馨提醒:測試請把循環次數改小一點,畢竟剛開始不小心多加了幾圈圈,電腦死機了!

四.重點總結

  • 1.注意在 Python 列表推導式書寫的時候,所有表達式都必須在 [] 內部,因為返回值是列表 list
  • 2.列表推導式是 Python 開發學習的知識點,多多聯系,熟能生巧.

五.猜你喜歡

  1. Python 配置環境
  2. Python 變量
  3. Python 運算符
  4. Python 條件判斷 if/else
  5. Python while 循環
  6. Python break
  7. Python continue
  8. Python for 循環
  9. Python 字符串
  10. Python 列表 list
  11. Python 元組 tuple
  12. Python 字典 dict
  13. Python 條件推導式
  14. Python 列表推導式
  15. Python 字典推導式

未經允許不得轉載:猿說編程 » Python 列表推導式

本文由博客 - 猿說編程 猿說編程 發布!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM