什麼叫列表生成式:python內建的可生成list的表示式
例如:要生成乙個list[1-10],可以用range()
>>> range(1,11)那如果要生成(1*1, 2*2, 3*3 ... 10*10)要如何解決?[1, 2, 3, 4, 5, 6, 7, 8, 9, 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)]列表生成式的書寫格式:[ x * x for x in range(1, 11)][1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[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']for迴圈可以同時兩個或者多個變數,比如dict和iteritems()可以同時迭代key和value:['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz', 'dx', 'dy', 'dz']
>>> d =也可以使用兩個變數生成list>>> for k, v in d.iteritems():
... print k, '=', v
...y = b
x = a
z = c
>>> 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]因為列表生成式後面只能有if不能有else,因為這個if是說「要不要保留x",加上else就沒辦法解釋邏輯。試錯過程:
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]
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 但如果要生成...