假设需要判断闰年,用if else来实现:
year = 600
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print("闰年")
else:
print("平年")
# 执行结果:
平年
python为我们提供了一种更加简便的方式:条件推导式
基本结构:表达式 if 筛选条件 else 分支表达式
year = 600
print("闰年") if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 else print("平年")
# 执行结果:
平年
如果满足if 筛选条件则执行表达式,否则执行分支表达式
假设需要生成一个列表,用for循环来实现:
list1 = []
for i in range(6):
list1.append(i)
print(list1)
# 执行结果:
[0, 1, 2, 3, 4, 5]
我们同样有一种方法可以用一行代码来实现它:列表推导式
基本结构: [表达式 for 变量 in 序列]
序列可以是 range 区间、元组、列表、字典和集合等数据类型。
list1 = [i for i in range(6)]
print(list1)
# 执行结果:
[0, 1, 2, 3, 4, 5]
除了这种最基本形式以外,列表推导式还有下面这两种结构:
1、[表达式 for 变量 in 序列 if 筛选条件]
list1 = [i // 2 for i in range(10) if i % 2 == 0]
print(list1)
# 执行结果:
[0, 1, 2, 3, 4]
用if 筛选条件 对推导式中 for 变量 in 列表 遍历的结果经行筛选,最后执行表达式。
用for循环来写:
list1 = []
for i in range(10):
if i % 2 == 0:
list1.append(i // 2)
print(list1)
# 执行结果:
[0, 1, 2, 3, 4]
2、[表达式 if 筛选条件 else 分支表达式 for 变量 in 序列]
ist1 = [i * 100 if i % 2 == 0 else i * 10 for i in range(10)] # 用if else 生成不同元素
print(list1)
# 执行结果:
[0, 10, 200, 30, 400, 50, 600, 70, 800, 90]
用for循环来写:
list1 = []
for i in range(10):
if i % 2 == 0: # 偶数
list1.append(i * 100)
else: # 奇数
list1.append(i * 10)
print(list1)
# 执行结果:
[0, 10, 200, 30, 400, 50, 600, 70, 800, 90]
基本结构:
{key : value for 变量 in 序列}
{key : value for 变量 in 序列 if 筛选条件}
{key : value if 筛选条件 else 分支表达式 for 变量 in 序列}
key1 = ("姓名", "年龄", "爱好")
value1 = ("千寻", "10", "跳舞")
dict1 = {key: value for key, value in zip(key1, value1 )} # 如果序列的元素是键值对,可以一次传两个变量
print(dict1)
# 执行结果:
{'姓名': '千寻', '年龄': '10', '爱好': '跳舞'}
基本结构:
{表达式 for 变量 in 序列}
{表达式 for 变量 in 序列 if 筛选条件}
{表达式 if 筛选条件 else 分支表达式 for 变量 in 序列}
list1 = [1, 2, 2, 1]
set1 = {i ** 2 for i in list1} # 集合特征:确定性、互异性、无序性
print(set1)
# 执行结果:
{1, 4}
基本结构:
(表达式 for 变量 in 序列)
(表达式 for 变量 in 序列 if 筛选条件)
(表达式 if 筛选条件 else 分支表达式 for 变量 in 序列)
generator1 = (i * 10 for i in range(6))
print(generator1)
print(list(generator1))
# 执行结果:
<generator object <genexpr> at 0x000001D7C29CDC10>
[0, 10, 20, 30, 40, 50]
生成器推导式返回的结果是一个生成器对象,如果我们需要得到其中的元素,可以根据需要转换为对应的序列类型,如列表、元组等。