三元表达式、列表生成式、生成器表达式

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
posted @ 2020-10-12 22:42  chchcharlie、  阅读(230)  评论(0编辑  收藏  举报