Python學習筆記 列表解析式

2021-07-11 23:36:16 字數 2908 閱讀 5141

python列表解析式是個很神奇的東西!

在列表中運用了for迴圈,或者for迴圈加上if 等條件判斷語句,能夠很明顯的簡化**量。

1.單個for迴圈

>>> a = [i for i in range(1,4)]

>>> a

[1, 2, 3]

2.兩個for迴圈

>>> a = [(x,y) for x in range(1,4) for y in range(1,4)]

>>> a

[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

for迴圈,從左到右執行,先得到x為1,然後進行三次y的迴圈,就如for迴圈的巢狀一樣。

然後將每次得到的x和y的值,放進乙個元組中,最後所有的元組組成列表。

三個for迴圈也是如此

>>> a = [(x,y,z) for x in range(1,3) for y in range(1,3) for z in range(1,3)]

>>> a

[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)]

3.for迴圈和if條件語句

>>> a = [i for i in range(1,10) if i%3==0]	#用if語句控制篩選出能夠整除3的數字

>>> a

[3, 6, 9]

當然也可以用or and  之類的條件語句。

>>> a = [i for i in range(1,10) if i%3==0 or i%2==0]	#篩選出能夠整除3或者整除2的數字

>>> a

[2, 3, 4, 6, 8, 9]

4.列表解析式中再運用列表解析式!

>>> a = [[(x,y) for y in range(1,3)]for x in range(1,3)]

>>> a

[[(1, 1), (1, 2)], [(2, 1), (2, 2)]]

這裡先得到最外面的列表的x的值後,然後進入裡面的列表中運算,得到x和y放到乙個元組中,最後裡面的列表全部運算完成後,把得到的所有的元組放到乙個列表中,再到外面的列表中運算得到x的值,再次進入裡面的列表,依此論推。

>>> a = [[[(x,y,z)for z in range(1,3)]for y in range(1,3)]for x in range(1,3)]

>>> a

[[[(1, 1, 1), (1, 1, 2)], [(1, 2, 1), (1, 2, 2)]], [[(2, 1, 1), (2, 1, 2)], [(2, 2, 1), (2, 2, 2)]]]

三個列表也是一樣的。

如果外面的列表中有兩個for迴圈的話從左往右計算,先算外面的第乙個迴圈得到乙個x的值,再算外面的第二個迴圈得到y的值,再進入裡面的列表計算,裡面的迴圈全部計算完成後,退到外面的列表算第二個迴圈得到下乙個值,再進入裡面的迴圈,依此論推,直到全部的迴圈算完。

>>> a = [[(x,y,z)for z in range(1,3)]for x in range(1,3) for y in range(1,3)]

>>> a

[[(1, 1, 1), (1, 1, 2)], [(1, 2, 1), (1, 2, 2)], [(2, 1, 1), (2, 1, 2)], [(2, 2, 1), (2, 2, 2)]]

總的來說,如果只有乙個列表解析式的話,從左往右計算迴圈。

如果列表解析式中還有列表解析式中的話,先算外面的(從左到右計算),再算裡面的,裡面算完,退出來再算。

【2 3】  如果1、2、3代表三個迴圈的話,先計算迴圈2得到乙個值,然後計算迴圈3得到乙個值,再算迴圈1,迴圈1全部迴圈完成後,再退出來算迴圈2得到下乙個值,再次進入迴圈1,直到迴圈2全部迴圈完成後,退到迴圈1得到下乙個值,再算迴圈2,然後迴圈1,,依此論推。

列子:一行**寫出九九乘法表!!!

print('\n'.join([''.join(['%s*%s=%-3s' % (x,y,y*x) for x in range(1,y+1)]) for y in range(1,10)]))

輸出:

1*1=1  

1*2=2  2*2=4  

1*3=3  2*3=6  3*3=9  

1*4=4  2*4=8  3*4=12 4*4=16 

1*5=5  2*5=10 3*5=15 4*5=20 5*5=25 

1*6=6  2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 

1*7=7  2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 

1*8=8  2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 

1*9=9  2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

先算外面的列表得到y=1,然後進入裡面的列表,range(1,1)x迴圈一次,得到1*1=1放到乙個列表中,然後退到外面y=2,裡面range(1,3) x迴圈兩次,得到1*2=2  2*2=4 並用join粘合成乙個字串,放到乙個列表中,這依此論推,最後全部算完後,用join粘合成乙個字串並加上換行符!

Python列表解析式

有時候,乙個程式設計設計模式使用得十分普遍,甚至會逐步形成自己獨特的語法。python程式語言中的列表解析式 list comprehension 就是這類語法糖 syntactic sugar 的絕佳代表。python中的 列表解析式 是個偉大的發明,但是要掌握好這個語法則有些難,因為它們並是用來...

python 列表解析式

python的列表解析式只是為了解決已有問題提供新的語法 什麼是列表解析式?列表解析式是將乙個列表轉換成另乙個列表的工具。在轉換過程中,可以指定元素必須符合一定的條件,才能新增至新的列表中,這樣每個元素都可以按需要進行轉換。可以把列表解析式看作為結合了filter函式與map函式功能的語法糖 dou...

Python列表解析(列表推導式)

列表解析 用來動態地建立列表 expr for iter var in iterable if cond expr 例子一 map lambda x x 2,range 6 0,1,4,9,16,25 x 2 for x in range 6 0,1,4,9,16,25 列表解析式可以取代內建的ma...