python字典推导式,列表推导式,匿名函数

Posted 乔小生1221

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python字典推导式,列表推导式,匿名函数相关的知识,希望对你有一定的参考价值。

python字典推导式

#字典推导式(在2.7中才加入的)
dict1={"a":1,"b":2,"c":3}
d={str(v):k for k,v in dict1.items()}
print d 
打印结果:
{\'1\': \'a\', \'3\': \'c\', \'2\': \'b\'}

 

python列表推导式

#列表推导式
list1=[1,2,3,4,5,6,7,8,9,10]
list2=[i for i in list1 if i%2==0 ]
print list2
打印结果:
[2, 4, 6, 8, 10]

 

python匿名函数

匿名函数就是不需要显式的指定函数名。

 

 

 打印结果:

100

匿名函数:

关键字lambda表示匿名函数,冒号前面的n表示函数参数,可以有多个参数。

匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:

有些函数在代码中只用一次,而且函数体比较简单,使用匿名函数可以减少代码量,看起来比较"优雅“

#这段代码
def calc(x,y):
    return x**y

#换成匿名函数
calc = lambda x,y:x**y
print(calc(2,5))

def calc(x,y):
    if x > y:
        return x*y
    else:
        return x / y
    
#三元运算换成匿名函数
calc = lambda x,y:x * y if x > y else x / y
print(calc(2,5))

匿名函数使用场景:

主要与其他函数联合使用

map函数

map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

遍历序列,对序列中每个元素进行函数操作,最终获取新的序列。

 

1.求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表

复制代码
#一般解决方案
li = [1,2,3,4,5,6,7,8,9]
for ind,val in enumerate(li):
    li[ind] = val * val
print(li)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 高级解决方案
li = [1,2,3,4,5,6,7,8,9]
print(list(map(lambda x:x*x,li)))
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
复制代码

 

reduce函数

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(func,[1,2,3]) 等同于 func(func(1,2),3)

对于序列内所有元素进行累计操作

 

 

#接受一个list并利用reduce()求积
from functools import reduce
li = [1,2,3,4,5,6,7,8,9]
print(reduce(lambda x,y:x * y,li))
# 结果=1*2*3*4*5*6*7*8*9 = 362880

 

filter函数

filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

对于序列中的元素进行筛选,最终获取符合条件的序列

复制代码
# 在一个list中,删掉偶数,只保留奇数
li = [1, 2, 4, 5, 6, 9, 10, 15]
print(list(filter(lambda x:x % 2==1,li)))  # [1, 5, 9, 15]

# 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
li = list(range(1, 200))
print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]
复制代码

 

sorted函数

sorted(iterable, /, *, key=None, reverse=False)

接收一个key函数来实现对可迭代对象进行自定义的排序

可迭代对象:主要与列表,字符串,元祖,集合和字典

key:接受一个函数,根据此函数返回的结果,进行排序

reverse:排序方向,默认为从小到大,reverse=True为逆向

复制代码
# 对列表按照绝对值进行排序
li= [-21, -12, 5, 9, 36]
print(sorted(li, key = lambda x:abs(x)))
# [5, 9, -12, -21, 36]
""" sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素: keys排序结果 => [5, 9, 12, 21, 36] | | | | | 最终结果 => [5, 9, -12, -21, 36] """
复制代码

 

举例使用:

复制代码
# 把下面单词以首字母排序
li = [\'bad\', \'about\', \'Zoo\', \'Credit\']
print(sorted(li, key = lambda x : x[0]))
# 输出[\'Credit\', \'Zoo\', \'about\', \'bad\']
"""
对字符串排序,是按照ASCII的大小比较的,由于\'Z\' < \'a\',结果,大写字母Z会排在小写字母a的前面。
"""

# 假设我们用一组tuple表示学生名字和成绩:

L = [(\'Bob\', 75), (\'Adam\', 92), (\'Bart\', 66), (\'Lisa\', 88)]
# 请用sorted()对上述列表分别按名字排序
print(sorted(L, key = lambda x : x[0]))
# 输出[(\'Adam\', 92), (\'Bart\', 66), (\'Bob\', 75), (\'Lisa\', 88)]

# 再按成绩从高到低排序
print(sorted(L, key = lambda x : x[1], reverse=True))
# 输出[(\'Adam\', 92), (\'Lisa\', 88), (\'Bob\', 75), (\'Bart\', 66)]
复制代码

 

以上是关于python字典推导式,列表推导式,匿名函数的主要内容,如果未能解决你的问题,请参考以下文章

十函数——匿名函数推导式

Python-有名匿名函数列表推导式

Python:enumerate函数introspection对象自省推导式(列表(list)推导式字典(dict)推导式集合(set)推导式)

Python 全栈开发:python的推导式(列表推导式字典推导式集合推导式)

8.字典推导式,集合推导式,匿名函数

Python入门-4控制语句:10推导式创建序列-列表推导式-字典推导式-集合推导式-生成器推导式