python三大推导式

python的推导式非常好用,可以大大简化代码的设计,大致可分为三大类,分别是列表推导式、字典推导式和集合推导式。

python列表推导式的三种用法

基本用法

>>> a = list(range(10))
>>> b = [ i*i for i in a ]
>>> b
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

实例解析

列表推导式,用英文的方括号“[ ]”括起来,for循环之前的表达式相当于for每一次遍历循环过程中的返回值,i则是for遍历过程中获取的元素,该表达式相当于如下的for循环。

>>>c = [] #声明一个空列表
for i in a: #遍历列表a中的元素
    x = i*i
    c.append(x)
c
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 


>>> d = [i*i for i in range(10)] #上面的代码我们可以将其简化一句代码
>>> d
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 

简而言之,这种列表推导式可以看作是:[ 表达式 for循环 ]两个部分的形式


增加条件判断的列表推导式

这种增加条件判断的推导式,可以看作是:[ 表达式 for循环 条件判断 ]三个部分的形式。

>>> a = [ x*x for x in range(10) if x%2 != 0 ] #增加了一个条件判断,用于过滤掉偶数
>>> a
[1, 9, 25, 49, 81]

多重循环的列表推导式

这种模式的列表推导式可以看作是:[ 表达式 for循环 for循环 ... ]

>>> a = [ x+y+z for x in 'abc' for y in '123' for z in 'def'] #增加了一个条件判断,用于过滤掉偶数
>>> a
['a1d', 'a1e', 'a1f', 'a2d', 'a2e', 'a2f', 'a3d', 'a3e', 'a3f', 'b1d', 'b1e', 'b1f', 'b2d', 'b2e', 'b2f', 'b3d', 'b3e', 'b3f', 'c1d', 'c1e', 'c1f', 'c2d', 'c2e', 'c2f', 'c3d', 'c3e', 'c3f']

从上面的实例,我们可以发现,多个循环的时候,就相当于for循环的嵌套,而不是并列循环,也就是最外层的循环一次,第二层的就需要全部循环完,以此类推。比如上面的例子,最外层的循环到b时,最外层的循环了一次,第二层已经循环一遍了,而第三层的意境循环三遍了。

列表推导式获取字典的数据

e = {'x1y1z1.com':'大器编程','理念':'璞玉天成,大器晚成'}
>>> new_e = [key+'—'+value for key, value in e.items() ]
>>> new_e
['x1y1z1.com—大器编程', '理念—璞玉天成,大器晚成']

字典推导式

字典的推导式与列表的推导式大同小异,不过字典是用“{}”括起来的,而且是键值对的类型:

>>> d = {x : str(x) for x in range(10) }
>>> d
{0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9'}
>>> type(d)
< class 'dict' >

集合推导式

集合的推导式也用“{}”括起来,但是没有键值对。

>>> f = {x*2 for x in range(10) }
>>> f
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18}
>>> type(f)
< class 'set' >

下一章节,我们将介绍python的迭代器。


全栈后端 / python教程 :


























Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.