python中從for迴圈延申到推導式的具體使用

2022-10-03 16:24:19 字數 3056 閱讀 5843

本文採用循序漸進的寫法,逐步遞進.

傳統for迴圈:

#獲取1到1000000的偶數

#採用傳統寫法(俗稱普通解析)

for i in range(1,10**6+1):

if(i%2==0):

print(i)

#程式執行結果:

#2#4

#.#.

#.#1000000

總結(從直觀上對**進行評價):能完成要求,但是**不夠簡潔.

改進後的**,採用列表推導式:

#獲取1到1000000的偶數

#採用列表推導式(俗稱列表解析)

print([i for i in range(1,10**6+1) if i%2==0])

#程式執行結果:

#2#4

#.#.

#.#1000000

我們再來從**執行速度上評價**.

傳統for迴圈的執行速度:

#採用clock()函式進行測量**執行時間

#用以浮點數計算的秒數返回當前的cpu時間,用來衡量不同程式的耗時,比time.time()更精確

import time

cpu_start=time.clock()

for i in range(1,10**6+1):

if(i%2==0):

print(i)

cpu_end=time.clock()

print("程式執行時間:",cpu_end-cpu_start)

#程式執行結果:

#2#4

#.#.

#.#1000000

#程式執行時間: 2.1866424

#注意:編譯器在3.3-3.8之間的會報乙個警告:deprecationwarning: time.clock has been deprecated in python 3.3 and will be removed from python 3.8: use time.perf_counter or time.process_time instead

#因為python3.3以後不被推薦使用,該方法依賴作業系統,建議使用per_counter(返回系統執行時間)或process_time(返回程序執行時間)代替

採用列表推導式的執行速度:

#採用clock()函式進行測量**執行時間

#用以浮點數計算的秒數返回當前的cpu時間,用來衡量不同程式的耗時,比time.time()更精確

import time

cpu_start=time.clock()

print([i for i in range(1,10**6+1) if i%2==0])

cpu_end=time.clock()

print("程式執行時間:",cpu_end-cpu_start)

#程式執行結果:

#[2,4,6,8...1000000]

#程式執行時間: 0.005884400000000012

#注意:編譯器在3.3-3.8之間的會報乙個警告:deprecationwarning: time.clock has been deprecated in python 3.3 and will be removed from python 3.8: use time.perf_counter or time.process_time instead

#因為python3.3以後不被推薦使用,該方法依賴作業系統,建議使用per_counter(返回系統執行時間)或process_time(返回程序執行時間)代替

總結(從**執行速度上進行評價):很明顯採用列表推導式的**,執行速度是更勝一籌的.

結論:1.編譯器會優化,不會因為簡寫而影響效率,反而因優化提高了效率.

2. 減少程式設計師工作量,減少出錯.

3. 即簡化了**,又增強了**的可讀性.

那麼存在列表解析式是否存在集合推導式,字典推導式,元組推導式,我們來一**竟吧!這裡就不再**他們的執行速度了!

集合推導式:

#集合推導式

#獲取1到10xhjuozvywe00000的偶數

x=type(x)

#輸出結果:##

字典推導式:

#獲取值是偶數的所有鍵值對形成的字典

#採用傳統方法

dict=

dict_x={}

for i,j in dict.items():

if(j%2==0):

dict_x[i]=j

print(dict_x)

print(type(dict_x))##

#獲取值是偶數的所有鍵值對形成的字典

#字典推導式

#方法一

#採用zip函式與for迴圈將兩個列表的值逐步遍歷作為字典的鍵與值

x =

print(x)

print(type(x))

#執行結果:##

#方法二

#獲取值是偶數的所有鍵值對形成的字典

#採用items()函式進行迭代遍歷

dx =

print(x)

print(type程式設計客棧(x))

#執行結果:

##元組推導式:

#獲取1到1000000的偶數

x=(i for i in range(1,10**6+1) if i%2==0)

print(x)

type(x)

#輸出結果:

#程式設計客棧xpr> at 0x00000241ffab2750>

#咦!前面都返回陣列或者集合或字典,這個怎麼返回了生成器(genexpr),這是因為元組是不可變的。我們來訪問一下裡面的元素把!

#獲取值是偶數的所有鍵值對形成的字典

x=(i for i in range(1,10**6+1) if i%2==0)

for i in x:

print(i)

#輸出結果:

#2#4

#.#.

#.#1000000

總結:推導式雖然有很多優點,但是唯一不足的就是區域性變數的可讀性不高.

本文標題: python中從for迴圈延申到推導式的具體使用

本文位址:

python判斷迴圈 python中迴圈與判斷

1.判斷 if 條件表示式 1 條件表示式為布林值,如 is 省略的寫法,變數存在,執行if 後面的 if a xx 當a 為true時執行if 後面的 為false不會執行 a 0,a 0.0,a a a a none,a a 空物件 都為false,if 後面的 都不會執行 if elif.el...

Python中for迴圈和while迴圈

python中用while語句和for語句表示迴圈執行某一段 while後面跟乙個條件,或者跟乙個序列 列表 元組等 序列為空則跳出迴圈,否則繼續迴圈 for迴圈後面跟乙個序列,迴圈次數為序列的長度 while迴圈可以加個else語句,跳出while的時候就執行這個else a 3 while a ...

python中的for迴圈

一 for迴圈概要 for迴圈是乙個通用序列迭代器,可遍歷任何有序的序列物件內的元素,包括字串 列表 元組 其他內建可迭代物件。一般格式 for in if break if continue else 二 for迴圈應用舉例 1 遍歷序列元素 for x in spam eggs ham prin...