三元表达式、列表生成式、生成器表达式
1、三元表达式
作用:可以将if...else...分支编程一行来写
if判断的语法:
if 判断条件:
执行
else:
执行
三元表达式语法:
条件成立返回左边的值 if 判断条件 else 条件不成立返回右边的值
例子1:求两个值的大小
# 例:求两个值的大小
# 使用if判断实现
def max(x, y):
if x > y:
return x
else:
return y
res = max(2, 3)
print(res)
# 使用三元表达式实现
def max(x, y):
res = x if x > y else y
return res
res = max(10, 100)
print(res)
例子2:让用户输入用户名,输入的用户如果不是tank,为其后缀添加_DSB(大帅哥)
username = input("请输入用户名:").strip()
new_username = username if username == "tank" else f"{username}_DSB"
print(new_username)
2、列表生成式
作用:可以一行代码实现生成列表
列表生成式语法:
list = [去除的每一个值添加到当前列表中/也可以取任意值 for 可迭代对象中取出的每一个值i in 可迭代对象]
# for的右边是循环次数,也可以取出可迭代对象中的每一个值
# for的左边可以为当前列表添加值
list = [值 for 可迭代对象中取出的每一个值i in 可迭代对象 if 判断]
例:
list2 = ["1" for i in range(1, 101)]
print(list2) # 生成一个有100个"1"的列表
例题1:生成一个1-100的列表
# 通过for循环添加值,生成一个1-100的列表
list1 = []
for line in range(1, 101):
list1.append(line)
print(list1)
# 通过列表生成式生成一个1-100的列表
list = [i for i in range(1, 101)]
print(list)
例题2:将name_list列表中的每一个元素的后缀都添加上_DSB
list1 = ['bear', 'banana', 'apple', "orange"]
new_list1 = [i + "_DSB" for i in list1]
print(new_list1)
例题3:在例题2的基础上,将apple过滤掉,其他元素后缀都添加_DSB
list1 = ['bear', 'banana', 'apple', "orange"]
new_list1 = [i + "_DSB" for i in list1 if not i == "apple"]
print(new_list1)
3、生成器表达式
生成器表达式也叫作生成器生成式
列表生成式: 若数据量小时采用
[i for i in range(1, 6)] --> [1, 2, 3, 4, 5]
优点:
可以依赖于索引取值,取值方便
缺点:
浪费资源
生成器生成式: 若数据量大时采用
() --> 生成器
(i for i in range(1, 6)) --> g生成器(1, 2, 3, 4, 5) # 生成器使用小括号(),自定义用g表示
优点:
节省资源
缺点:
取值不方便
例题:生成一个有50个值的生成器
# 列表生成时实现:生成一个有1000个值的生成器
g = [i for i in range(1, 51)]
print(g) # 打印出一个列表
# 生成器生成式:生成一个有1000个值的生成器
g = (i for i in range(1, 51))
# <generator object <genexpr> at 0x000002462EF79570>
print(g) # 打印出一个生成器对象
print(g.__next__()) # 打印出第一个值 1
print(g.__next__()) # 打印出第二个值 2