您好,登錄后才能下訂單哦!
這篇文章主要介紹python如何使用列表推導式,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
推導式是從一個或者多個迭代器快速簡潔地創建數據類型的一種方法,它將循環和條件判斷結合,從而避免語法冗長的代碼,提高代碼運行效率。能熟練使用推導式也可以間接說明你已經超越了python
初學者的水平。
''' value1:如果條件表達式condition成立,返回value1 ; 如果條件表達式不成立,返回value2 ; condition:條件表達式 Value2:如果條件表達式condition成立,返回value1 ; 如果條件表達式不成立,返回value2 ; ''' value1 if condition else Value2
假如有這樣一個需要:判斷一個數字是奇數還是偶數?
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個人博客地址): https://www.codersrc.com @WeChat Official Account(微信公眾號):猿說python @Github:www.github.com @File:python_list.py @Time:2019/9/30 20:45 @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! """ # 新手代碼 x = 10 if x%2 == 0: print("新手說:x是偶數") else: print("新手說:x是奇數") # 老司機 x = 15 print("老司機說:x是偶數") if x%2 == 0 else print("老司機說:x是奇數")
輸出結果:
新手說:x是偶數
老司機說:x是奇數
觀察上面代碼可以看出來,選手一(新手)一共占用了5行代碼,而選手二(老司機)完成同樣一個功能僅僅只需要兩行,這就是性價比,往往這就是職場上鑒別工作能力/升職加薪的細節。
列表推導式是條件推導式和循環一起配合使用,并返回一個列表,并且整個表達式需要在[]內,因為返回值也是列表。
''' 語法一: 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]
需求一:獲取0~20的所有偶數并且乘以10,并返回所有計算之后的結果。示例代碼如下:(使用列表推導式語法一實現)
''' 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'>
需求二:將0~20的偶數乘以10,奇數乘以100,并返回所有計算之后的結果。示例代碼如下:(使用列表推導式語法二實現)
''' 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'>
可能有童鞋納悶,我明明for循環就能實現的功能,為毛要用這鳥玩意推導式?
使用列表推導式的效率遠遠高于for循環,可能執行一句print(“helloworld”)對于cpu而已只需要0.0002秒,你可能感覺不到差距,如果需要輸出一億次helloworld呢?往往細節覺得成敗!
假如有一個需求:將0~10000000(一億)以內的所有整數存到列表中,對比一下列表推導式和for循環耗時情況:
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秒
輸出結果很明顯,實現通用的功能,列表推導式的效率整整高出普通for循環一倍。
以上是“python如何使用列表推導式”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。