Python 列表生成式

2021-09-11 21:47:13 字數 1910 閱讀 4840

什麼叫列表生成式:python內建的可生成list的表示式

例如:要生成乙個list[1-10],可以用range()

>>> range(1,11)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

那如果要生成(1*1, 2*2, 3*3 ... 10*10)要如何解決?

方法一:利用迴圈

>>> l = 

>>> for x in range(1, 11):

...>>> l

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

方法二:列表生成式

>>> [ x * x for x in range(1, 11)]

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

列表生成式的書寫格式:[ x * x for x in range(1, 11)]

[process(x) for x in l if should_keep(x)]
上面為原型

1、將需要生成的內容放入x * x

2、後面跟上for迴圈起來

for迴圈後面還能新增if判斷,例如:篩選出偶數的平方

>>> [x * x for x in range(1, 11) if x % 2 == 0]

[4, 16, 36, 64, 100]

也可以使用兩層迴圈,生成全排列:

>>> [m + n for m in 'abcd' for n in 'xyz']

['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz', 'dx', 'dy', 'dz']

for迴圈可以同時兩個或者多個變數,比如dict和iteritems()可以同時迭代key和value:

>>> d = 

>>> for k, v in d.iteritems():

... print k, '=', v

...y = b

x = a

z = c

也可以使用兩個變數生成list

>>> d = 

>>> [k + '=' + v for k, v in d.iteritems()]

['y=b', 'x=a', 'z=c']

思考題:

將以下list的字串改小寫

思路:1、有字串,有數字,如果直接用s.lower()進行更改會出現錯誤,因為整數非字串型別

2、可以使用內建的isinstance函式判斷乙個變數是否為字串

3、要根據這個原型進行調整:[process(x) for x in l if should_keep(x)]

4、process(x) 等於 s.lower() if isinstance(s, str) else s ;後面按正常走:(**不懂可以看備註1)

>>> [s.lower() if isinstance(s,str) else s for s in l]
得出的結果:

>> [s.lower() if isinstance(s,str) else s for s in l]

試錯過程:

1、沒有出現整數

>>> [l.lower() for l in l if isinstance(l, str)]

備註1、為什麼不能用

>>> [s.lower() for s in l if isinstance(s, str)elses for s in l]

因為列表生成式後面只能有if不能有else,因為這個if是說「要不要保留x",加上else就沒辦法解釋邏輯。

Python 列表生成式

列表生成式即list comprehensions,是python內建的非常簡單卻強大的可以用來建立list的生成式。舉個例子,要生成list 1,2,3,4,5,6,7,8,9,10 可以用list range 1,11 list range 1,11 1,2,3,4,5,6,7,8,9,10 但...

python列表生成式

全都是重點!列表生成式即listcomprehensions,是python內建的非常簡單卻強大的可以用來建立list的生成式。舉個例子,要生成list 1,2,3,4,5,6,7,8,9,10 可以用range 1,11 range 1,11 1,2,3,4,5,6,7,8,9,10 但如果要生成...

python列表生成式

全都是重點!列表生成式即listcomprehensions,是python內建的非常簡單卻強大的可以用來建立list的生成式。舉個例子,要生成list 1,2,3,4,5,6,7,8,9,10 可以用range 1,11 range 1,11 1,2,3,4,5,6,7,8,9,10 但如果要生成...