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

三元表达式

可以将if....else...双分支流程变成一行

语法:

条件成立返回的值 if 判断条件 else 条件不成立返回的值

# 求两个值的大小
def max_min(a, b):
    if a > b:
        return a
    else:
        return b

max_min(10,23)
print(max_min(10,23))

# 可以写成三元表达式形式
def max_min(a, b):
    res = a if a > b else b
    return res

print(max_min(10,23))
# 需求: 让用户输入用户名,输入的用户如果是ank,为其后缀添加_DSB

name = input("请输入用户名:").strip()
if name != 'ank':
    print(name)
else:
    print(name+'_DSB')

# 可以写成三元表达式形式
name = input("请输入用户名:").strip()
user_name = name if name != 'ank' else name + '_DSB'
print(user_name)

列表生成式

可以实现一行实现生成列表

语法:

list = [取出的每一个值、任意值 for 从可迭代对象中取出的每一个值 in 可迭代对象]

for的右边是循环次数,可以取出可迭代对象中的每一个值

for的左边可以为当前列表添加值

# 将l1中的值,依次取出,添加到l2中
l1 = [1, 238, 32, 4, 5]
l2 = [i for i in l1]
print(l2)

# 将l3列表中的每一个人后缀都添加_dsb
l3 = ['tank','jason', 'sean', 'egon']
l4 = [i+'_dsb 'for i in l3]
print(l4)

list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象 if 判断]

# 将name_list列表中的tank过滤掉,其他人后缀都添加_dsb
name_list = ['tank', 'jason', 'sean', 'egon', 'tank']
new_name = [i+'_dsb' for i in name_list if i != 'tank']
print(new_name)

生成器表达式(生成式)

生成器生成式vs列表生成式

列表生成式:数据量小时使用,一次全部取出

​ 优点:可以依赖索引取值,取值方便

​ 缺点:浪费资源

生成器生成式:将列表生式的[ ]换成()

数据量大时使用

​ 优点:节省资源

​ 缺点:取值不方便

# 生成一个1000个值的生成器
# 用生成器生成式
g = (i for i in range(1,1001))
print(g)
>>>
# 得到生成器的内存地址
<generator object <genexpr> at 0x000001DC7CDDF748>
# 用列表生成式实现
list = [i for i in range(1,1001)]
print(list)
>>>
[1, 2, 3, ....., 998, 999, 1000]
posted @ 2019-11-14 21:00  Mr沈  阅读(215)  评论(0编辑  收藏  举报