chzhiyi / -KnowledgeShare

6 stars 1 forks source link

20190411 - python3的三种推导式 - baijing #50

Open KeepInLove1006 opened 5 years ago

KeepInLove1006 commented 5 years ago

python3的三种推导式

推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体,共有三种推导,在Python2和3中都有支持


第一种:列表推导式(list)

列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形

基本格式如下:

格式[元素(或计算方法) for循环(允许多个) if语句]

lst = [ x for x in (1,2,3) if x == 1]

例子1:

过滤条件可有可无,取决于实际应用

lst = [x * x for x in range(1,10)]
print(lst)

结果:

[1, 4, 9, 16, 25, 36, 49, 64, 81]

例子2:

lst4 = [ a for a in range(1,20)  if a % 2 ==0 ]
print(lst4)

结果:

[2, 4, 6, 8, 10, 12, 14, 16, 18]

例子3:

生成器表达式

multiples = (i for i in range(30) if i % 3 is 0)
print(multiples)
for i in multiples:
    print(i)

结果:

<generator object<genexpr> at 0x0000000000542E58> 0 3 6 9 12 15 18 21 24 27

通过结果分析出显示了generator 这就是生成器的标识,不要以为用小括号就是set,tuple.这个注意下:他自己是可以遍历的

和上边的区别是【】变成了{}, 里面的原理是一样的,换汤不换药

lst1 ={a : a=='baijing' for a in {'bailian': 1 , 'baijing': 5, 'jingchu': 10, 'huasheng': 7 , 'qiaosong': 2 } }
print(lst1)

结果:

{'bailian': False, 'baijing': True, 'jingchu': False, 'huasheng': False, 'qiaosong': False}


三、集合推导式(set)

它们跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}。

squared = {x**2 for x in [1, 1, 2,23,5,5,5,7,7,81] }
print(squared)
print(type(squared))

结果:{1, 6561, 4, 49, 529, 25}

'''集合(set)是一个无序不重复元素的序列。 它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集、差集、并集等关系 set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。''' --------这一句总结来自网友 @奋斗中的咸鱼


推导式原理:

a = [1,2,3,4,5,6,7,8,9]
b = []
for x in a:
    if x % 2 ==0:
        b.append(x)
        print( x )

结果:[2, 4, 6, 8]

上面这个循环的话,在python里可以用推导式用一行代码就可以搞定!

一行?你在逗我么?

lst = [x for x in range(1,10) if x % 2 == 0 ]
print(lst)

结果:[2, 4, 6, 8]

对python就是可以为所欲为!哈哈哈~