列表生成式是python內建的建立列表的一種方法。
如果要生成列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我們可以使用list(range(1,11)).
但是如果要生成[1x1, 2x2, 3x3, …, 10x10]怎麼辦?
第一種方法:使用迴圈
for x in
range(1
,11):
但是迴圈太繁瑣,使用列表生成式僅僅用一句話就可以替代上面的迴圈:
[x*x for x in
range(1
,11)]
for 迴圈後面也可以跟上判斷,這樣我們可以篩選不同條件下的引數,例如求偶數或者奇數的和
[x*x for x in
range(1
,11)if x %2==
0]#求偶數兩兩乘積
[x*x for x in
range(1
,11)if x %2==
1]#求奇數數兩兩乘積
#計算結果[4
,16,36
,64,100][
1,9,
25,49,
81]
在for迴圈後面也可以在跟乙個for迴圈,生成全排列:
[x + y for x in
'abc'
for y in
'123'
]#結果
['a1'
,'a2'
,'a3'
,'b1'
,'b2'
,'b3'
,'c1'
,'c2'
,'c3'
]
三層或者三層以上的迴圈很少用到列表生成式
for 迴圈可以同時對兩個甚至多個變數進行迴圈,因此列表生成式可以使用兩個變數生成lsit:
mydict =
[x +
'='+ y for x,y in mydict.items()]
#結果[
'c=5'
,'b=2'
,'a=1'
]
使用列表生成式可以把所有的字串變為小寫:
l =
['hello'
,'world'
,'ibm',]
[s.lower(
)for s in l]
#結果[
'hello'
,'world'
,'ibm'
,]
但是如果列表中的元素並不全是字串,使用lower時就會出錯,
l =
['hello'
,'world',18
,][s.lower(
)for s in l]
#結果traceback (most recent call last)
: file ""
, line 1,in
[s.lower(
)for s in l]
file ""
, line 1,in
[s.lower(
)for s in l]
attributeerror:
'int'
object has no attribute 'lower'
因此需要對元素型別進行判斷,對元素的型別我們可以使用type()或者isinstance,在此建議使用isinstance:
isinstance用法如下:
li =
['ss',1
,1.0
]isinstance
(li[0]
,str
)isinstance
(li[1]
,int
)isinstance
(li[2]
,int
)#結果
true
true
false
因此當出現非字串型別的元素時,可以使用isinstance判斷:
l =
['hello'
,'world',18
,][s.lower(
)for s in l if
isinstance
(s,str)]
[s.lower(
)for s in l if
type
(s)==
str]
#結果[
'hello'
,'world',]
['hello'
,'world'
,]
參考:自用 python3 列表生成式
列表生成式即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 但如...
python3 列表生成式
列表生成式即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 但...
python3 之死扣迭代和列表生成式
python3 之迭代和列表生成式 本文章是講解列表迭代和列表生成式的 coding utf 8 import collections.abc author 京哥 迭代 也稱為遍歷,是迴圈獲取每乙個元素的值 迭代 也稱為遍歷,迴圈獲取每乙個元素 for i in tom jack alice pri...