推导式可以快速生成一个列表、字典或其他需要的格式,还会减少代码量。
推导式的使用方法(以列表为例):
1.推导式:
a = [i for in xxx]
2.推导式结合 if 条件进行过滤:
a = [i for in xxx if 条件]
3.推导式完整if:
a = [ 条件成立的返回值 if 条件 else 条件不成立返回值 i for in xxx]
1.普通推导式
# -------------正常的写法-------------
a1 = []
for i in range(10):
a1.append(i)
print(a1)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# ---------使用推导式的写法-----------
a2 = [i for i in range(10)]
print(a2)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 快速生成0-9的列表
2.推导式结合 if 条件进行过滤
# -------------正常的for循环加if判断-----------------
a1 = []
for i in range(10):
if i%2==0: # 偶数
a1.append(i)
print(a1)
# [0, 2, 4, 6, 8]
# ----------推导式加if判断(加在for条件后面)----------
a2 = [i for i in range(10) if i%2==0]
print(a2)
# [0, 2, 4, 6, 8]
3.推导式完整if
2里只有if过滤一次,那么如果还有else的条件呢?
else直接写在a2中的if后面,会报错,并且没有条件返回值。
格式:
a = [ 条件成立的返回值 if 条件 else 条件不成立返回值 i for in xxx]
# -------------正常的for循环加if else-----------------
a1 = []
for i in range(10):
if i%2==0: # 偶数
a1.append(f"我是偶数{i}")
else:
a1.append(f"我是奇数{i}")
print(a1)
# ['我是偶数0', '我是奇数1', '我是偶数2', '我是奇数3', '我是偶数4', '我是奇数5', '我是偶数6', '我是奇数7', '我是偶数8', '我是奇数9']
# ---------------------------------------------------
# if 前面 是满足了if条件的返回值
# else 后面 是不满足if的另一个返回值
a2 = [f"我是偶数{i}" if i%2==0 else f"我是奇数{i}" for i in range(10)]
print(a2)
# ['我是偶数0', '我是奇数1', '我是偶数2', '我是奇数3', '我是偶数4', '我是奇数5', '我是偶数6', '我是奇数7', '我是偶数8', '我是奇数9']
4.字典推导式
字典推导式也同理,语法相似。只是字典为key&value需要注意
list1 = ['a', 'b', 'c']
dict1 = {index: value for index, value in enumerate(list1)}
print(dict1)
# {0: 'a', 1: 'b', 2: 'c'}