当前位置: 代码迷 >> 综合 >> python高级进阶_13_魔法函数之内建方法(range,map,reduce,filter,sorted,sort)
  详细解决方案

python高级进阶_13_魔法函数之内建方法(range,map,reduce,filter,sorted,sort)

热度:57   发布时间:2023-10-24 20:18:07.0

内建方法 我查看了文档一共有二千多个,这么多 你根本也记不住,但是常用的要熟悉,能提高我们的工作效率 。

range()

这个函数估计很多人都用过,比如我们想把 0到10 的偶数放到list里面

常用的方法是

a=[]
for  i  in range(11):if i%2==0:a.append(i)
print(a)# 打印结果  
[0, 2, 4, 6, 8, 10]

我们也可以用列表生成式

这么实现:

a=[i for i in range(11) if i%2==0]
print(a)
#打印结果
[0, 2, 4, 6, 8, 10]

利用range 最简单的是这样的

a=list(range(0,11,2)) 
# 0 代表 起始位置, 11代表终止为止, 2 代表步长。  
# 系统默认 0 为起始位置 ,步长是1 
print(a)

这代码简洁吧, 面试的时候能这样写,说明是高手, 能装逼了。

map 函数

记住 map 返回的是一个迭代器(可以用next 取值 ) ,range 返回的不是迭代器 。

传递一个参数

有一个list a=[1,2,3], 让list 的值都乘积 , 如果不用map 应该这么做

a=[1,2,3]
b=[]for i  in a:b.append(i*i)
print (b)

但是 map 函数一行就行了 。

a=[1,2,3]
a=list(map(lambda x:x*x,a))  # lambda 是匿名函数 ,  

执行过程为 : 从a 里取出一个值,然后传递给 x, 并返回 x*x 的值 放到迭代器,然后list 转化为列表。

自己也可以用列表生成式, 自己尝试下 。

传递两个参数

a=[2,4,6]b=[8,10,12]c=list(map(lambda x,y:x+y,a,b))    # x 的值从 a种取, y从b 中取
print(c)

我们都是用 匿名函数 演示, 同样我们可以用自定义的函数

如下:

a=[2,4,6]b=[8,10,12]def test(x,y):return x+y
c=list(map(test,a,b))
print(c)

同样也可以达到我们的效果。

filter 函数

这个函数的意思 会对每个元素调用方法, 当满足true 条件 返回,返回类型是的迭代器

例如:

a=[2,4,6,7]b=[8,10,12]print(next(filter(lambda x:x>4,a)))  # 可以用next 取值 ,说明是迭代器
c=list(filter(lambda x:x>4,a))     #   x 取a 中的值 ,  参数进行funciton 判断 x>4, 如果是true 就返回, 
print(c)

打印结果:
6
[6, 7]

reduce 函数

reduce 的主要用途是计算累加和 ,看下代码:

如果用平常的方法为:

from functools import reduce
a=0
for i in range(101):a=a+i
print(a)

使用reduce

b=reduce(lambda x,y:x+y,range(101))
print(b)

解析过程为;

  1. 首先 list 中第一位 0 ,传递给x, 第二位 1 传递给 y ,
  2. 求和 x+y =0+1 =1,
  3. 让1 作为x 的值继续传递 , 然后取 2 为y
  4. 然后继续求和 2+1=3, 然后作为 x值, 依次循环 得出 总和

sort 和sorted 函数

这个两个都是 排序用的, 如果想倒序就需要加 reverse

>>> a=[2,4,1,9,5]
>>> a.sort()
>>> a
[1, 2, 4, 5, 9]
>>> a.sort(reverse=True)
>>> a
[9, 5, 4, 2, 1]
>>> sorted(a)
[1, 2, 4, 5, 9]
>>> sorted(a,reverse=1)
[9, 5, 4, 2, 1]
>>> a.reverse()
>>> a
[1, 2, 4, 5, 9]
>>>

同样字母也能实现排序。自己尝试下

  相关解决方案