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'}
 

原文地址:https://www.cnblogs.com/vincent-sh/p/12687198.html