Python3中的推導式

目錄

1:推導式介紹

2:列表推導式

2.1創建列表

2.2:對列表操作

2.3:嵌套for

2.4:帶if

3:字典推導式

4:集合推導式

5:元組沒有推導式


1:推導式介紹


python3中推導式提供了一種簡明快速的方法來創建列表、字典、集合。當需要對他們中的每項執行一個操作時,可以考慮使用推導來完成。
其標準語法爲:
[
    expression  for target1 in interable1 if condition1
                for target2 in interable2 if condition2
                ......
                for targetN in interableN if conditionN]

可以編寫任意數量的嵌套的for循環,每個for分句都可以帶一個if選擇

2:列表推導式

2.1創建列表

# 創建列表:[1, 3, 5, 7, 9]

#1: for循環創建
lst = []
for i in range(1,10):
	if i % 2 == 1:
		lst.append(i)

print(lst)

# 2: 創建列表: [1, 3, 5, 7, 9]
lst = [i for i in range(1, 10, 2)]
print(lst)

# 3:帶if,創建列表[1, 3, 5, 7, 9]
lst = [i for i in range(1,10) if i % 2 == 1]
print(lst)

2.2:對列表操作

lst = [2,3,4,5,6]
print([x*2 for x in lst])
# 結果 [4, 6, 8, 10, 12]
# 與下面的結果一樣,但是推導更經濟,速度更快。
ret = []
for x in lst:
	ret.append(x*2)
print(ret)


print([x+100 for x in lst])
# 結果 [102, 103, 104, 105, 106]
ret = []
for x in lst:
	ret.append(x+100)
print(ret)

2.3:嵌套for

# 
lst = [x + y for x in [1,2,3,4] for y in [100,200,300,400] ]
print(lst)
# 結果 [101, 201, 301, 401, 102, 202, 302, 402, 103, 203, 303, 403, 104, 204, 304, 404]

# 與下面的結果一樣
ret= []
for x in [1,2,3,4]:
	for y in [100,200,300,400]:
		ret.append(x+y)
print(ret)
# 結果 [101, 201, 301, 401, 102, 202, 302, 402, 103, 203, 303, 403, 104, 204, 304, 404]

2.4:帶if

print('---1:--' + '*'*60)
# 單個if
lst = [x + y for x in [1,2,3,4] if x % 2 == 0 for y in [100,200,300,400] ]
print(lst)
# 結果 [102, 202, 302, 402, 104, 204, 304, 404]

# 與下面的結果一樣
ret= []
for x in [1,2,3,4]:
	if x % 2 == 0:
		for y in [100,200,300,400]:
			ret.append(x+y)
print(ret)
# 結果 [102, 202, 302, 402, 104, 204, 304, 404]

print('---2:--' + '*'*60)
# 單個if
lst = [x + y for x in [1,2,3,4]  for y in [100,200,300,400] if x + y > 300 ]
print(lst)
# 結果 [301, 401, 302, 402, 303, 403, 304, 404]

# 與下面的結果一樣
ret= []
for x in [1,2,3,4]:
	for y in [100,200,300,400]:
		if x + y > 300:
			ret.append(x+y)
print(ret)
# 結果 [301, 401, 302, 402, 303, 403, 304, 404]


print('---3:--' + '*'*60)
# 多個if
lst = [x + y for x in [1,2,3,4] if x % 2 == 0 for y in [100,200,300,400] if y > 200]
print(lst)
# 結果 [302, 402, 304, 404]

# 與下面的結果一樣
ret= []
for x in [1,2,3,4]:
	if x % 2 == 0:
		for y in [100,200,300,400]:
			if y > 200:
				ret.append(x+y)
print(ret)
# 結果 [302, 402, 304, 404]

print('---4:--' + '*'*60)

3:字典推導式

# 也是可以有嵌套for,可以有if語句
dic = {x:x**2 for x in range(1,10) if x % 2 == 0 }
print(dic)
# 結果 {2: 4, 4: 16, 6: 36, 8: 64}
# 與下面結果一樣
dic = {}
for x in range(1,10):
	if x % 2 == 0:
		dic[x] = x**2
print(dic)

4:集合推導式

print('*'*60)
st = {(x,y) for x in range(1,10) if x % 2 == 0  for y in range(1,10) if y % 3 == 1}
print(st)
# 結果:{(2, 7), (6, 4), (4, 7), (6, 7), (8, 1), (6, 1), (4, 4), (2, 1), (8, 7), (4, 1), (2, 4), (8, 4)}
print(type(st)) # <class 'set'>

print('*'*60)
st = { x + y for x in range(1,5) for y in range(1,5)}
print(st)
# 結果: {2, 3, 4, 5, 6, 7, 8}
print(type(st))  # <class 'set'>

5:元組沒有推導式

元組沒有推導式的,(x for x in iterable)這種形式的是生成器表達式(後面會介紹):

tp = (x for x in range(1,5) )
print(tp)
print(type(tp))

"""
結果:
<generator object <genexpr> at 0x00000168139BEFC0>
<class 'generator'>
"""
print('*'*60)
# 可以使用tuple來生成
tp = tuple(x for x in range(1,5) )
print(tp)
print(type(tp))
"""
結果:
(1, 2, 3, 4)
<class 'tuple'>
"""

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章