Python列表推導式(for表示式)及用法

2021-09-26 03:51:15 字數 2517 閱讀 9283

列表推導式可以利用 range 區間、元組、列表、字典和集合等資料型別,快速生成乙個滿足指定需求的列表。

列表推導式的語法格式如下:

[表示式 for 迭代變數 in 可迭代物件 [if 條件表示式] ]
此格式中,[if 條件表示式] 不是必須的,可以使用,也可以省略。

通過列表推導式的語法格式,明顯會感覺到它和 for 迴圈存在某些關聯。其實,除去 [if 條件表示式] 部分,其餘各部分的含義以及執行順序和 for 迴圈是完全一樣的(表示式其實就是 for 迴圈中的迴圈體),即它的執行順序如下所示:

for 迭代變數 in 可迭代物件

表示式

初學者可以這樣認為,它只是對 for 迴圈語句的格式做了一下簡單的變形,並用 括起來而已,只不過最大的不同之處在於,列表推導式最終會將迴圈過程中,計算表示式得到的一系列值組成乙個列表。

例如如下**(程式一):

a_range = range(10)

# 對a_range執行for表示式

a_list = [x * x for x in a_range]

# a_list集合包含10個元素

print(a_list)

上面**的第 3 行會對 a_range 執行迭代,由於 a_range 相當於包含 10 個元素,因此程式生成的 a_list 同樣包含 10 個元素,且每個元素都是 a_range 中每個元素的平方(由表示式 x*x 控制)。

執行上面**,可以看到如下輸出結果:

[0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64, 81]
不僅如此,我們還可以在列表推導式中新增 if 條件語句,這樣列表推導式將只迭代那些符合條件的元素。例如如下**:

b_list = [x * x for x in a_range if x % 2 == 0]

# a_list集合包含5個元素

print(b_list)

第一行**與程式一中第 3 行**大致相同,只是為這裡給列表推導式增加了 if 條件語句,這會導致推導式只處理 range 區間的偶數,因此程式生成的 b_list 只包含 5 個元素。

執行上面**,可以看到如下輸出結果:

[0 ,4 , 16, 36, 64]
另外,以上所看到的列表推導式都只有乙個迴圈,實際上它可使用多個迴圈,就像巢狀迴圈一樣。例如如下**:

d_list = [(x, y) for x in range(5) for y in range(4)]

# d_list列表包含20個元素

print(d_list)

上面**中,x 是遍歷 range(5) 的迭代變數(計數器),因此該 x 可迭代 5 次;y 是遍歷 range(4) 的計數器,因此該 y 可迭代 4 次。因此,該(x,y)表示式一共會迭代 20 次。上面的 for 表示式相當於如下巢狀迴圈:

dd_list = 

for x in range(5):

for y in range(4):

執行上面**,可以看到如下輸出結果:

[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]
當然,也支援類似於三層巢狀的 for 表示式,例如如下**:

e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)]

# e_list列表包含120個元素

print(e_list)

對於包含多個迴圈的 for 表示式,同樣可指定 if 條件。假如我們有乙個需求:程式要將兩個列表中的數值按「能否整除」的關係配對在一起。比如 src_a 列表中包含 30,src_b 列表中包含 5,其中 30 可以整除 5,那麼就將 30 和 5 配對在一起。對於上面的需求使用 for 表示式來實現非常簡單,例如如下**:

src_a = [30, 12, 66, 34, 39, 78, 36, 57, 121]

src_b = [3, 5, 7, 11]

# 只要y能整除x,就將它們配對在一起

result = [(x, y) for x in src_b for y in src_a if y % x == 0]

print(result)

執行上面**,可以看到如下輸出結果:

[(3, 30), (3, 12), (3, 66), (3, 39), (3, 78), (3, 36), (3, 57), (5, 30), (11, 66), (11, 121)]

python 理解列表推導式以及列表推導式巢狀

所謂列表推導式,就是將乙個可迭代的列表遍歷,將每次遍歷的元素拿出來進行一些操作,並用乙個 括起來,組成乙個新的列表 expression for i in item if condition expression 就是對每乙個元素的具體操作表示式 item是某個可迭代物件的元素,如列表,元組或字串等...

python列表推導式

a 1,2,3,4,5,6,7 將每個元素求平方 加入到b列表中 1.列表解析 b x 2 for x in a print b 2.用map實現 c map lambda x x 2,a print list c 3.用迴圈實現 d for x in a print d 將a中的偶數求立方加入到新...

Python 列表推導式

python中的列表推導式有較好的用途,這裡介紹兩個可能大家會用到的,具體簡單的列表推導式的這裡就不說了 testlist 1,2,3,4 defmul2 x return x 2 print mul2 i for i in testlist 還有一張可以通過在內部加上一些邏輯語句從而對資料進行篩選...