python 三元表达式的 列表推导式 生成器推导式
python中三元表达式的语法如下 ===if else
result = x if condition else y
另外一种三元表达式,比较少见
result = (x, y)[condition]
列表推导式 ==〉循环
python中列表推导式用于使用其他列表创建一个新列表。
其基本形式为: [表达式 for 变量 in 列表]
list_1_10 = [x**2 for x in range(1,11)] print(list_1_10)
列表推导式结合三元表达式
example2 = [[1,2,3],[4,5,6],[7,8,9],[10]] exmaple5 = [j**2 for i in example2 if len(i)>1 for j in i if j%2 == 0] print(exmaple5)
生成器推导式
Python生成器推导式:
生成器推导式(generator expression)的用法与列表推导式非常相似,在形式上生成器推导式使用圆括号(parentheses)作为定界符,而不是列表推导式所使用的方括号(square
brackets)。
与列表推导式最大的不同是,生成器推导式的结果是一个生成器对象。生成器对象类似于迭代器对象,具有惰性求值的特点,只在需要时生成新元素,比列表推导式具有更高的效率,空间占用非常少,尤其适合大数据处理的场合。
使用生成器对象的元素时,可以根据需要将其转化为列表或元组,也可以使用生成器对象的next()方法或者内置函数next()进行遍历,或者直接使用for循环来遍历其中的元素。但是不管用哪种方法访问其元素,只能从前往后正向访问每个元素,没有任何方法可以再次访问已访问过的元素,也不支持使用下标访问其中的元素。当所有元素访问结束以后,如果需要重新访问其中的元素,必须重新创建该生成器对象,enumerate、filter、map、zip等其他迭代器对象也具有同样的特点。
g = (i for i in range(199)) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__())
举例:
字典推导式
>>> s = {x:x.strip() for x in (' he ', 'she ', ' I')} #输出形式形如:x+:+strip处理过后的x
>>> s
{' he ': 'he', 'she ': 'she', ' I': 'I'}
>>> for k, v in s.items():
print(k, ':', v)
he : he
she : she
I : I
#Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)。str.strip('0')的意思即使删除str字符串首尾出现的字符‘0’
字典推动式通过{key:value+表达式}的方式生成一个字典
>>> {i:str(i) for i in range(1, 5)}
{1: '1', 2: '2', 3: '3', 4: '4'} #由range对象i和i转化成的字符串组成的字典
>>> x = ['A', 'B', 'C', 'D']
>>> y = ['a', 'b', 'b', 'd']
>>> {i:j for i,j in zip(x,y)} #通过zip对象+两个字符型列表组成字典
{'A': 'a', 'B': 'b', 'C': 'b', 'D': 'd'}
Python 中,使用集合推导式可以借助列表、元组、字典、集合以及 range 区间,快速生成符合需求的集合。
集合推导式的语法格式和字典推导式完全相同,如下所示:
{ 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }
其中,用 [] 括起来的部分,可以使用,也可以省略。
有读者可能会问,集合推导式和字典推导式的格式完全相同,那么给定一个类似的推导式,如何判断是哪种推导式呢?最简单直接的方式,就是根据表达式进行判断,如果表达式以键值对(key:value)的形式,则证明此推导式是字典推导式;反之,则是集合推导式。
【例 1】
setnew = {i**2 for i in range(3)}
print(setnew)
运行结果为:
{0, 1, 4}
【例 2】既然生成的是集合,那么其保存的元素必须是唯一的。
tupledemo = (1,1,2,3,4,5,6,6)
setnew = {x**2 for x in tupledemo if x%2==0}
print(setnew)
运行结果为:
{16, 4, 36}
【例 3】
dictdemo = {'1':1,'2':2,'3':3}
setnew = {x for x in dictdemo.keys()}
print(setnew)
运行结果为:
{'2', '1', '3'}