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

三元表达式

可以将if...else..…分支变成一行

语法:

	`条件为真时的结果  if  判断的条件 lese  条件为假时的结果`
a = 1
b = 2
#第一种写法
erroStr = "More" if a > b else "Less"
print(erroStr) # 运行结果为:Less
#第二种写法
print({True:'More',False:'less}[a > b]')#运行结果为Less
#第三种写法
print(("FalseValue", "TrueValue")[a > b]) # 运行结果为:FalseValue       

列表生成式

列表推导式可以利用 range 区间、列表、元组、集合和字典等数据类型,快速生成一个满足指定需求的列表。


语法:

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]

此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。

列表生成式

list1 = [f'1{line}' for line in range(1, 101)]# print(list1)

Demo: 将name_list列表中的每一个人后缀都添加_dsb

name_list = ['jason', '饼哥(大脸)', 'sean', 'egon']

new_name_list = [name + '_dsb' for name in name_list]

另外,以上所看到的列表推导式都只有一个循环,实际上它可使用多个循环,就像嵌套循环一样

d_list = [(x, y) for x in range(5) for y in range(4)]

d_list列表包含20个元素

上面代码中,x 是遍历 range(5) 的迭代变量(计数器),因此该 x 可迭代 5 次;y 是遍历 range(4) 的计数器,因此该 y 可迭代 4 次。因此,该(x,y)表达式一共会迭代 20 次。上面的 for 表达式相当于如下嵌套循环

代码结果:

[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]

当然,也支持三次嵌套的for循环表达式


应用场景:数据量小时采用

[line for line in range(1, 6)] ---> [1, 2, 3, 4, 5]

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

缺点:和生成器表达式对比 浪费资源

生成器表达式(元组生成式)

语法:除了和列表生成式用的括号不一样,其他完全一样

(表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] )

例如,我们可以使用下面的代码生成一个包含数字 1~9 的元组:

a = (x for x in range(1,10))print(a)

运行结果:

<generator object at 0x0000020BAD136620>

从上面的执行结果可以看出,使用元组推导式生成的结果并不是一个元组,而是一个生成器对象


如果想要使用元组推导式获得新元组或新元组中的元素,有以下三种方式:

1 使用 tuple() 函数,可以直接将生成器对象转换成元组,例如:

a = (x for x in range(1,10))

print(tuple(a))

运行结果为:

(1, 2, 3, 4, 5, 6, 7, 8, 9)

2 直接使用 for 循环遍历生成器对象,可以获得各个元素,例如:

a = (x for x in range(1,10))

for i in a:

print(i,end=' ')

print(tuple(a))

运行结果:

1 2 3 4 5 6 7 8 9 ()

3 使用 __next__() 方法遍历生成器对象,也可以获得各个元素,例如:

a = (x for x in range(3))

print(a._next_())

print(a._next_())

print(a._next_())

a = tuple(a)

运行结果:

0

1

2

转换后的元组: ()

注意,无论是使用 for 循环遍历生成器对象,还是使用 next() 方法遍历生成器对象,遍历后原生成器对象将不复存在,这就是遍历后转换原生成器对象却得到空元组的原因。

应用场景:数据量过大时使用

(line for line in range(1, 6)) ---> g生成器(1, 2, 3, 4, 5)

优点:节省资源

缺点:取值不方便

还有集合生成式,字典生成式

原文地址:https://www.cnblogs.com/kai-/p/11858691.html