人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

python列表推導(dǎo)式 經(jīng)典代碼

發(fā)布日期:2021-12-26 16:03 | 文章來源:gibhub

在學(xué)習(xí)編程過程中,我們不僅要學(xué)習(xí)python語法,同時也需要學(xué)習(xí)如何把自己代碼寫的更美觀,效率更高。

一.什么是推導(dǎo)式

推導(dǎo)式是從一個或者多個迭代器快速簡潔地創(chuàng)建數(shù)據(jù)類型的一種方法,它將循環(huán)和條件判斷結(jié)合,從而避免語法冗長的代碼,提高代碼運行效率。能熟練使用推導(dǎo)式也可以間接說明你已經(jīng)超越了python初學(xué)者的水平。

二.條件推導(dǎo)式

1.語法

'''
value1:如果條件表達式condition成立,返回value1 ; 如果條件表達式不成立,返回value2 ;
condition:條件表達式
Value2:如果條件表達式condition成立,返回value1 ; 如果條件表達式不成立,返回value2 ;
 
'''
 
value1 if condition else Value2

2.實戰(zhàn)練習(xí)

假如有這樣一個需要:判斷一個數(shù)字是奇數(shù)還是偶數(shù)?

# !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是偶數(shù)")
else:
 print("新手說:x是奇數(shù)")
 
# 老司機
x = 15
print("老司機說:x是偶數(shù)") if x%2 == 0 else print("老司機說:x是奇數(shù)")

輸出結(jié)果:

新手說:x是偶數(shù)
老司機說:x是奇數(shù)

觀察上面代碼可以看出來,選手一(新手)一共占用了5行代碼,而選手二(老司機)完成同樣一個功能僅僅只需要兩行,這就是性價比,往往這就是職場上鑒別工作能力/升職加薪的細節(jié)。

三.列表推導(dǎo)式

列表推導(dǎo)式是條件推導(dǎo)式和循環(huán)一起配合使用,并返回一個列表,并且整個表達式需要在[]內(nèi),因為返回值也是列表。

1.語法

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

2.實戰(zhàn)練習(xí)

需求一:獲取0~20的所有偶數(shù)并且乘以10,并返回所有計算之后的結(jié)果。示例代碼如下:(使用列表推導(dǎo)式語法一實現(xiàn))

'''
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))

輸出結(jié)果:

[0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200]
<class 'list'>

需求二:將0~20的偶數(shù)乘以10,奇數(shù)乘以100,并返回所有計算之后的結(jié)果。示例代碼如下:(使用列表推導(dǎo)式語法二實現(xiàn))

'''
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))

輸出結(jié)果:

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

3.效率對比

可能有童鞋納悶,我明明for循環(huán)就能實現(xiàn)的功能,為毛要用這鳥玩意推導(dǎo)式?

使用列表推導(dǎo)式的效率遠遠高于for循環(huán),可能執(zhí)行一句print(“helloworld”)對于cpu而已只需要0.0002秒,你可能感覺不到差距,如果需要輸出一億次helloworld呢?往往細節(jié)覺得成?。?/p>

假如有一個需求:將0~10000000(一億)以內(nèi)的所有整數(shù)存到列表中,對比一下列表推導(dǎo)式和for循環(huán)耗時情況:

import time # 添加time模塊,用于統(tǒng)計代碼運行時間
 
#一共添加10000000次數(shù)據(jù)到列表中
total_num = 10000000
 
#使用列表推導(dǎo)式
start_time = time.time()
list1 = [x for x in range(0,total_num)] # 列表推導(dǎo)式
end_time = time.time()
print("使用列表推導(dǎo)式耗時:{}秒".format(end_time-start_time))
 
#使用普通for循環(huán)
start_time = time.time()
list2 = list()
for x in range(0,total_num): # for循環(huán)
 list2.append(x)
end_time = time.time()
print("使用普通for循環(huán)耗時:{}秒".format(end_time-start_time))

輸出結(jié)果:

使用列表推導(dǎo)式耗時:0.5455152988433838秒
使用普通for循環(huán)耗時:1.2068836688995361秒

輸出結(jié)果很明顯,實現(xiàn)通用的功能,列表推導(dǎo)式的效率整整高出普通for循環(huán)一倍。

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

四.重點總結(jié)

  • 1.注意在列表推導(dǎo)式書寫的時候,所有表達式都必須在[]內(nèi)部,因為返回值是列表list
  • 2.列表推導(dǎo)式是python開發(fā)學(xué)習(xí)的知識點,多多聯(lián)系,熟能生巧.

到此這篇關(guān)于python列表推導(dǎo)式 經(jīng)典代碼的文章就介紹到這了,更多相關(guān)python列表推導(dǎo)式 內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部