python三元表达式求值_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'}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值