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

三元表达式

可以讲if...else...分支变成一行

语法:if 判断条件 else,条件成立,返回左边的值,条件不成立,返回右边的值

求两个值的大小

num1 = 10
num2 = 20
res = num1 if num1 > num2 else num2
print(res)
>>>20

def max1(num1,num2):
    res = num1 if num1 > num2 else num2
    return res
res = max1(10,20)
print(res)
>>>20
username = input('input your username:')
new_username = username if username+ ':gay' == 'yyh' else username 
print(new_username)

列表生成式

可以一行生成列表

语法: list = [可迭代对象中取出每一个值,任意值 for 可迭代对象对象中取出的值 in 可迭代对象]

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

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

使用:

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

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

list1 = [line for line in range(1,11)]
print(list1)
>>[1,2,3,4,5,6,7,8,9,10]

list2 = ['A' for line in range(1,11)]
print(list2)
>>['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A']

例:将列表中人名添加后缀_sb

name_list = ['yyh','xxt','ldh','hys']
new_name = [name+'_sb' for name in name_list]
print(new_name)
>>['yyh_sb', 'xxt_sb', 'ldh_sb', 'hys_sb']


#给列表中指定人添加后缀并形成新列表
new_name = [name+'_sb' for name in name_list if name == 'yyh' or name == 'xxt']
print(new_name)
>>['yyh_sb', 'xxt_sb']

生成器表达式(生成式)

生成生成器

语法: 与列表生成式相似,只是把[]改成()

生成一个有10000个值的生成器 通过next取值

g = (line for line in range(1,10001))
print(g)
#<generator object <genexpr> at 0x00000246E871CC50>
print(next(g))
>>1

列表生成式生成10000个值

list1 = [line for line in range(1,10001)]
print(list1)
>>[1,2,,3,4,5,6,....,10000]
#会直接输出一个有10000个值的列表

**生成器生成式:在数据量过大时使用

​ 优点:节省资源

​ 缺点:取值不便

​ 列表生成式:在数据量较小时使用

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

​ 缺点:浪费资源

猜你喜欢

转载自www.cnblogs.com/littleb/p/11858148.html