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'>
"""

 

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