列表輸出循環左移_python 列表推導式(經典代碼)(21)

文章首發微信公眾號,微信搜索:猿說python

截止到目前為止,python基礎內容已經學習了50%左右,在學習編程過程中,我們不僅要學習python語法,同時也需要學習如何把自己代碼寫的更美觀,效率更高。

一.什么是推導式

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

1ab37603d5c0371689390744721567b7.png

二.條件推導式

1.語法

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

2.實戰練習

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

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解憂
@Blog(個人博客地址): shuopython.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行代碼,而選手二(老司機)完成同樣一個功能僅僅只需要兩行,這就是性價比,往往這就是職場上鑒別工作能力/升職加薪的細節。

三.列表推導式

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

1.語法

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

2.實戰練習

需求一:獲取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'>

3.效率對比

可能有童鞋納悶,我明明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循環一倍。

e6431b5e9fa606a02897dad563cdf3a0.png

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

四.重點總結

1.注意在列表推導式書寫的時候,所有表達式都必須在[]內部,因為返回值是列表list

2.列表推導式是python開發學習的知識點,多多聯系,熟能生巧.

猜你喜歡:

1.python條件判斷if/else

2.python列表list

3.for循環

4.python字典推導式

轉載請注明:猿說Python ? python列表推導式

想了解更多python內容請直接搜索微信公眾號:猿說python

Python教程 - 猿說Python?www.shuopython.com
1bd786fcfd6814ec94964870379a26ed.png

本人也還在學習python中,博客會持續更新ing,有興趣的小伙伴關注走一波,推薦瀏覽個人博客網站:猿說python,文章采用樹狀分類,結構目錄清晰一點,文章內容有問題的話歡迎給出建議或者直接留言.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393660.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393660.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393660.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode100. 相同的樹(dfs)

給定兩個二叉樹&#xff0c;編寫一個函數來檢驗它們是否相同。如果兩個樹在結構上相同&#xff0c;并且節點具有相同的值&#xff0c;則認為它們是相同的。示例 1:輸入: 1 1/ \ / \2 3 2 3[1,2,3], [1,2,3]輸出: true### 代碼java /*** Definiti…

k8s 分發證書文件 啟動文件

接著上面的博客繼續寫 準備三臺主機 192.168.1.71 192.168.1.72 192.168.1.73 現在k8s壓縮包 我使用時1.12版本 不能下載請FQ 百度網盤提供1.12版本 https://pan.baidu.com/s/1Ty6DRaRtL-0HiTCwy5ubPA n6cy 192.168.1.71 執行 pwd -> /tmp tar -zxf kubernetes-server-lin…

如何確保您的Progressive Web App保持其Lighthouse審核分數

by Ondrej Chrastina通過Ondrej Chrastina 如何確保您的Progressive Web App保持其Lighthouse審核分數 (How to make sure your Progressive Web App keeps its Lighthouse audit score) I bet most of you have implemented a web application before. Some of you may even …

計算機字節換算在線,計算機字節換算(計算機字節換算器)

8bit(位)1Byte(字節)1024Byte(字節)1KB1024KB1MB1024MB1GB 換算率約等于1000(1024)&#xff0c;從大到小順序為T、GB、MB(兆Zhao)、KB、B再小就是位了。.字節(Byte 發音&#xff1a;/‘bait/)&#xff1a;字節是通過網絡傳輸信息(或在硬盤或內存中存儲信息)的單位。 在ASCII碼中…

Robot Framework自動化測試(一)--- 安裝

所需環境&#xff1a; 1、python 2、robotframework  https://pypi.python.org/pypi/robotframework/2.8.5#downloads 3、wxPython ——>是python的一個GUI庫&#xff0c;下面要安裝的RIDE是基于這個庫開發的&#xff0c;所以要安裝 地址&#xff1a;https://wxpython.org…

leetcode1296. 劃分數組為連續數字的集合(貪心算法)

給你一個整數數組 nums 和一個正整數 k&#xff0c;請你判斷是否可以把這個數組劃分成一些由 k 個連續數字組成的集合。 如果可以&#xff0c;請返回 True&#xff1b;否則&#xff0c;返回 False。 示例 1&#xff1a; 輸入&#xff1a;nums [1,2,3,3,4,4,5,6], k 4 輸出&…

linux_svn命令操作

轉至元數據起始 linux下svn命令大全 1、將文件checkout到本地目錄 svn checkout path&#xff08;path是服務器上的目錄&#xff09;例如&#xff1a;svn checkout svn://192.168.1.1/pro/domain簡寫&#xff1a;svn co 2、往版本庫中添加新的文件 svn add file例如&#xff1a…

用python玩轉數據慕課答案第四周_大學慕課用Python玩轉數據章節測試答案

大學慕課用Python玩轉數據章節測試答案更多相關問題滲透泵型片劑控釋的基本原理是A&#xff0e;減小溶出B&#xff0e;減慢擴散C&#xff0e;片劑膜外滲透壓大于片劑膜內&#xff0c;將片內藥物從語義學批評是什么&#xff1f;As usual, _____ man was given his individual as…

html怎么讓五張照片并排顯示,最考驗右腦5張照片,30s內能發現問題都是牛人,PS做不出來...

我們的大腦認定這種空間不可能存在&#xff0c;然而卻要忍受眼睛親眼所見其存在的苦惱。“眼見為實”已經成為錯誤的判斷標準&#xff0c;于是你會感到很過癮&#xff0c;顛覆的快感。事實上&#xff0c;通過色彩&#xff0c;不僅可以考量人們的視力&#xff0c;更能判斷大腦水…

aws v2.2.exe_如何使用Python 3.6在AWS EC2上創建運行uWSGI,NGINX和PostgreSQLDjango服務器...

aws v2.2.exeby Sumeet Kumar通過Sumeet Kumar 如何使用Python 3.6在AWS EC2上創建運行uWSGI&#xff0c;NGINX和PostgreSQLDjango服務器 (How to create a Django server running uWSGI, NGINX and PostgreSQL on AWS EC2 with Python 3.6) Getting a server up and running …

Cloud in Action: Install OpenStack Ocata from scratch

Cloud in Action: Install OpenStack Ocata from scratch薛國鋒 xueguofeng2011gmail.comOpenStack can control and manage large pools of compute, storage, and networking resources throughout a datacenter, througha dashboard or via the OpenStack API, and work…

jQUery中closest和parents的主要區別是

①&#xff0c;前者從當前元素開始匹配尋找&#xff0c;后者從父元素開始匹配尋找&#xff1b;②&#xff0c;前者逐級向上查找&#xff0c;直到發現匹配的元素后就停止了&#xff0c;后者一直向上查找直到根元素&#xff0c;然后把這些元素放進一個臨時集合中&#xff0c;再用…

leetcode1276. 不浪費原料的漢堡制作方案(貪心)

圣誕活動預熱開始啦&#xff0c;漢堡店推出了全新的漢堡套餐。為了避免浪費原料&#xff0c;請你幫他們制定合適的制作計劃。 給你兩個整數 tomatoSlices 和 cheeseSlices&#xff0c;分別表示番茄片和奶酪片的數目。不同漢堡的原料搭配如下&#xff1a; 巨無霸漢堡&#xff…

CentOS7配置ip

CentOS7配置ip 安裝完centos7,重啟就可以與linux第一次接觸了。我是最小化安裝&#xff0c;所以沒有圖形界面。登錄介面顯示發型版本和內核版本&#xff1a; CentOS Linux 7(Core) Kernel 3.10.0-862.e17.x86_64 on an x86_64 下面就是登錄提示localhost login。在后面輸入roo…

react開發模式_通過開發帶有精靈動畫的游戲來學習高級React模式

react開發模式by Pavel Vlasov通過帕維爾弗拉索夫(Pavel Vlasov) 通過開發帶有精靈動畫的游戲來學習高級React模式 (Learn advanced React patterns by developing a game with sprite animation) Have you ever wanted to learn some advanced React patterns? Or build you…

js腳本鎖計算機軟件,JS使用插件cryptojs進行加密解密數據實例

本文實例講述了JS使用插件cryptojs進行加密解密數據。分享給大家供大家參考&#xff0c;具體如下&#xff1a;Testing websocketsvar key BOTWAVEE;//CBC模式加密function encryptByDESModeCBC(message) {var keyHex CryptoJS.enc.Utf8.parse(key);var ivHex CryptoJS.enc.U…

nginx、Apache、IIS服務器解決 413 Request Entity Too Large問題方法匯總

一、nginx服務器 nginx出現這個問題的原因是請求實體太長了。一般出現種情況是Post請求時Body內容Post的數據太大了&#xff0c;如上傳大文件過大、POST數據比較多。處理方法 在nginx.conf增加 client_max_body_size的相關設置, 這個值默認是1m&#xff0c;可以增加到8m以增加提…

python代理池好難啊_新人不會自己搭建代理池?快來引用大佬的

新人不會自己搭建代理池?快來引用大佬的對于新人學習爬蟲來說,雖然不會爬取太難的網站,但是有時候爬取的數據量過大的時候,也會遇到返回不了數據的問題,這時候打開網頁一看.可能會看到"你的ip訪問頻率太高"這樣的提示,出現這種問題的原因可能是,你被封ip啦.但是爬蟲…

pat 1123(AVL)

題意&#xff1a;給n個數&#xff0c;按照順序插入AVL&#xff0c;輸出層次遍歷&#xff0c;如果這顆AVL是完全二叉樹&#xff0c;輸出YES 否則輸出NO 當時考試的時候。忘記AVL什么時候旋轉了&#xff0c;數據結構不會寫&#xff0c;感覺藥丸 判斷完全二叉樹&#xff0c;這個簡…

leetcode435. 無重疊區間(貪心算法)

給定一個區間的集合&#xff0c;找到需要移除區間的最小數量&#xff0c;使剩余區間互不重疊。 注意: 可以認為區間的終點總是大于它的起點。 區間 [1,2] 和 [2,3] 的邊界相互“接觸”&#xff0c;但沒有相互重疊。 示例 1: 輸入: [ [1,2], [2,3], [3,4], [1,3] ] 輸出: 1 …