1.迭代器

迭代器能被next调用,并不断返回下一个值的对象,叫作迭代器(迭代器是对象)
概念:迭代器指的是迭代取值的工具,迭代是一个重复的过程每次重复都是基于上一次的结果而继续单纯的重复不是迭代。
特征:不依赖索引,通过next指针迭代所有数据,依次只取一个,可以大大节省空间。迭代无限量的数据 (1)可迭代对象
如果成员中函数有__iter__这个方法,就是可迭代对象,
dir函数可以查看一个对象中的所有的成员。 (2) 迭代器
1.for循环遍历数据的底层实现就是利用了迭代,通过next方法进行调用,从而获得数据
可迭代对象和迭代器之间的关键,从不可被直接获取,--->可被直接获取的过程
2.如果是一个可迭代对象,不一定是一个迭代器 __iter__
如果是一个迭代器,一定是一个可迭代对象 __iter__ __next__ (3)如何定义一个迭代器
iter(可迭代对象)
可迭代对象.__iter__() (4)如何判断一个迭代器
如果内置成员中,含有__iter__和__next__两个方法,就可以判断是一个迭代器 (5)如果调用一个迭代器
next(迭代器)
迭代器.__next__()
迭代器通过next方法调用时,是单项不可逆的过程 (6)重置迭代器
next调用,单项不可逆,一路走到黑 (7)使用Iterator 和 Iterable来判断是否是迭代器(首字母是大写的i)
先导入模块
from collections import Iterator , Iterable
iterator 迭代器 含有__iter__ 和__next__
iterbale 可迭代对象 含有__iter__ (8)判断迭代数据
setvar = {'a','b','c'}
res = isinstance(setvar,Iterator) #判断是否是迭代器
print(res) #False 必须含有__iter__和__next__两种方法的才是迭代器 res = isinstance(setvar,Iterable) #判断是否是可迭代对象
print(res) #True 含有__iter__用法 (9)更多调用方式
通过next获取迭代器中的数据
通过for循环遍历迭代器
通过for和next配合使用迭代器

  

2.map函数

map是高阶函数,能够把函数当成参数传递就是高阶函数
map(func,iterable)
功能:把iterbale里面的数据一个一个拿出来,放到func函数中进行处理,处理一个扔一个到迭代器中
把处理的结果扔到迭代器中,返回迭代器
参数:
func 自定义函数 或者内置函数
iterable 可迭代对象(容器类型数据 range对象 迭代器)
返回值:
迭代器
可以通过next取值,for循环取值,for+next取值,list强转取值(返回一个列表) 例子:
lst = ["1","2","3","4"]
it =map(int,lst)
print(list(it))
解析:
首先拿出列表当中的"1",扔到int函数当中处理,处理的结果扔到迭代器当中
首先拿出列表当中的"2",扔到int函数当中处理,处理的结果扔到迭代器当中
首先拿出列表当中的"3",扔到int函数当中处理,处理的结果扔到迭代器当中
首先拿出列表当中的"4",扔到int函数当中处理,处理的结果扔到迭代器当中
最后把迭代器返回 例子:
2. [1,2,3,4] => [1,4,9,16]
#map 方法一
def func(n):
return n**2
it = map(func,lst) #map 方法二
it =map(lambda n : n**2,lst) 例子:
dic = {97:"a",98:"b",99:"c"} 给你["a","b","c"] => 返回 [97,98,99]
#1.将字典的键值对进行翻转
dic_new = {}
for k,v in dic.items():
print(k,v)
dic_new[v] = k
print(dic_new) #2.去获取键对应的值
lst_new = []
for i in lst:
res = dic_new[i]
lst_new.append(res)
print(lst_new) # [97, 98, 99] #map 改写
lst = ["a","b","c"]
dic = {97:"a",98:"b",99:"c"} #方法一
def func(n):
dic_new = {}
for k,v in dic.items():
dic_new[v] = k
return dic_new[n]
it = map(func,lst) #把列表中的元素一个一个取出来
print(list(it)) #方法二
def func(n):
for k,v in dic.items():
if n == v:
return k
it = map(func,lst)
print(list(it)) #map传入的参数
#为字典时,传入的是键
#为列表时,传入的是一个个元素
#为元组时,传入的是一个个元素
#为集合时,传入的是一个个元素
#列表嵌套字典,传入的是列表中的每个字典元素
map处理数据是,是处理一个扔一个到迭代器中,最终全部处理完后,返回迭代器。

  

3.filter函数

filter(func,iterable)  #可迭代对象
功能:
在自定义的函数中,过滤数据
如果返回True,代表保留数据
如果返回False,代表舍弃该数据
参数:
func 自定义函数
iterable 可迭代对象(容器类型数据 range对象 迭代器)
返回值:
迭代器 例子:
#1.[1,2,3,4,5,6,7,8] => 要所有的奇数
#filter 改写
def func(n):
if n%2 ==0:
return False
else:
True
it = filter(func,lst) #把lst列表中的每个元素传入到func的参数中去
res =isinstance(it,iterator) #判断it是不是迭代器
print(res)
#改写成lambda表达式
lst = [1,2,3,4,5,6,7,8]
it = filter(lambda n : True if n%2==1 else False,lst)
print(list(it))

  

4.reduce函数

reduce(func,iterable)
功能:一次性从iterable当中拿出两个值,扔到func函数中进行处理
把运算的结果在和iterable的第三个值继续扔到func中做运算...依次类推
参数:
func 自定义函数
iterable 可迭代对象(容器数据类型 range对象 迭代器)
返回值:
最后结算的结果
例子:
# ##(1) [5,4,8,8] =>5488
#方法一
lst = [5,4,8,8]
strvar = ''
for i in lst:
strvar += str(i)#定义一个空字符串用来每次循环拼接
print(strvar,typr(strvar))
intvar = int(strvar) #方式二
it = iter(lst)
num1 = next(it)#5
num2 = next(it) #4
print(num1)
print(num2)
#total = 5*10+4
total = num1 * 10 + num2 #54
print(total)
for i in it:#[8,8] 上面已经取了两个值了,所以只剩下两个了
#54 * 10 + 8 -> 548 * 10 + 8 ->5488
total = total * 10 +i
print(total,type(total))
'''
5 * 10 + 4 => 54
54 * 10 + 8 => 548
548 * 10 + 8 => 5488
''' reduce改写 用reduce的时候需要引入相应的模块
from functools import reduce
lst = [5,4,8,8]
def func(x,y):
return x*10+y
res = reduce(func,lst) #得到的是最后的结果
print(res,type(res))#5488 <class 'int'>
'''
先从lst拿出前两个数据,5和4,扔到func当中进行运算5*10+4=54
拿出54 和 容器中第三个元素8,扔到func当中进行运算 54*10 +8 = 548
拿出548 和 容器中第四个元素8,扔到func当中进行运算 548*10 +8 = 5488
最后把5488,直接返回,程序结束
'''
#优化成lambda表达式
print(reduce(lambda x,y : x*10+y,lst)) 例子:
#(2) '789'转换为 =》 789 (禁止使用int)
def func(x,y):
return x*10 +y def func_int(n):
dic = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}
return dic[n] it = map(func_int,'789') # <map object at 0x00000000022254A8>
#print(list(it)) [7,8,9] res = reduce(func,it)
print(res,type(res))

  

5.sorted函数

sorted(iterable,reverse=False,key=函数)  #三个可填参数
功能 : 排序 默认从小到大
参数:
iterable 可迭代对象(容器类型数据 range对象 迭代器)
reverse 代表是否倒序 默认等于False
key 自定义函数 或 内置函数
返回值:
排序后的列表
例子:
#(1) 默认从小到大排序,返回新的列表
#排序列表
container = [100,200,13,-6,0]
#排序元组
container = (100,200,13,-6,0)
#排序集合
container = {100,200,13,-6,0}
#字符串(按照ascill编码排序)
container = 'oneal'
#字典(默认排序的是键)
container = {'a':1,'b':2,'c':3} lst_new = sorted(container)
print(lst_new) #(2) 从大到小排序
lst_new = sorted(container,reverse=True)
print(lst_new) #(3) 通过内置函数排序
#按照绝对值排序 abs
print(abs(-200))
lst = [-200,-300,9,20]
res = sorted(lst,key=abs)
print(res)
#按照abs绝对值大小进行排序
'''
9 => abs(9) => 9
20 => abs(20) => 20
-200 => abs(-200) => 200
-300 => abs(-300) => 300
''' #(4) 通过自定义函数进行排序
lst = [19,27,35,48]
def func(n):
return n%10
res = sorted(lst,key=func)
res = sorted(lst,key = lambda n : n%10)
print(res)
'''
35 % 10 => 5
27 % 10 => 7
48 % 10 => 8
19 % 10 => 9
''' sort 和 sorted区别
sort 基于所有的列表进行排序,只限定列表类型 返回值为None
sorted 所有的容器类型数据都能排序,返回一个全新的列表

  

总结:

今天主要学了迭代器,4个高阶函数map,filter,reduce,sorted

迭代器是能被next调用,并不断返回下一个值的对象叫作迭代器

特点是不依赖索引,通过next指针迭代所有数据,一次只取一个,迭代无限量的数据,大大节省空间。

可迭代对象,成员中函数有__iter__这个方法,就是可迭代对象。可以用dir函数来查看一个对象的所有成员

如果是一个可迭代对象,但不一定是一个迭代器,如果是一个迭代器,一定是一个可迭代对象

如何定义一个迭代器?  iter(可迭代对象)  或  可迭代对象.__iter__()

如何判断一个迭代器?内置成员含有__iter__和__next__两个方法就可以判断是一个可迭代器

如何调用一个迭代器?next(迭代器) 或  迭代器.__next__()

同时也讲了迭代器通过next方法调用时,是单项不可逆的。一直会继续跟着上面next输出后的值,继续往下走,直至没有值

同时也可以使用Iterator 和 Iterable 来判断是否是迭代器  需要引入相应的模块

from collections import Iterator , Iterable

iterator 迭代器类型 含有__iter__ 和__next__
iterable可迭代对象 含有__iter__

迭代器取值 可以通过next,for循环,for和next配合使用,以及list强制在转换

map:

map(func,iterable),就是把iterable里面的数据一个一个拿出来,放到func函数(自定义或内置函数)中进行处理,处理一个就把处理结果扔到迭代器,直到全部处理完,返回迭代器

filter:

filter(func,iterable),就是在自定义的函数中,过滤数据,如果返回True,保留数据,返回False,代表舍弃该数据

reduce:

reduce(func,iterbale),一次性从iterable当中拿出两个值,扔到func函数中进行处理,把运算结果与第三个值继续扔到func函数中做运算,....依次类推,最后返回计算的结果

sorted:

sorted(iterable,reverse=False,key=函数),可填三个参数,功能就是排序默认从小到大。key可以填自定义函数和内置函数。返回的是一个全新的列表

迭代器,map,filter,reduce,sorted函数---day12的更多相关文章

  1. Python函数式编程之map/filter/reduce/sorted

    Python函数式编程之map/filter/reduce/sorted 关于函数式编程 函数式编程Functional Programming,其思想更接近数学计算 函数式编程就是一种抽象程度很高的 ...

  2. python中的map、reduce、filter、sorted函数

    map.reduce.filter.sorted函数,这些函数都支持函数作为参数. map函数 map() 函数语法:map(function, iterable, ...) function -- ...

  3. python 内置函数 map filter reduce lambda

    map(函数名,可遍历迭代的对象) # 列组元素全加 10 # map(需要做什么的函数,遍历迭代对象)函数 map()遍历序列得到一个列表,列表的序号和个数和原来一样 l = [2,3,4,5,6, ...

  4. python常用函数进阶(2)之map,filter,reduce,zip

    Basic Python : Map, Filter, Reduce, Zip 1-Map() 1.1 Syntax # fun : a function applying to the iterab ...

  5. 数组的高阶方法map filter reduce的使用

    数组中常用的高阶方法: foreach    map    filter    reduce    some    every 在这些方法中都是对数组中每一个元素进行遍历操作,只有foreach是没有 ...

  6. 如何在python3.3用 map filter reduce

    在3.3里,如果直接使用map(), filter(), reduce(), 会出现 >>> def f(x): return x % 2 != 0 and x % 3 != 0  ...

  7. Swift map filter reduce 使用指南

    转载:https://useyourloaf.com/blog/swift-guide-to-map-filter-reduce/ Using map, filter or reduce to ope ...

  8. python的reduce,map,zip,filter和sorted函数

    一.    reduce(function,Iterable),它的形式和map()函数一样.不过参数function必须有两个参数. reduce()函数作用是:把结果继续和序列的下一个元素做累积计 ...

  9. lambda、map、reduce、filter、sorted函数

    # lambda 函数from functools import reducea = lambda x: x ** 2print(a(3))def power(func, l=[]): return ...

  10. 高阶函数map(),filter(),reduce()

    接受函数作为参数,或者把函数作为结果返回的函数是高阶函数,官方叫做 Higher-order functions. map()和filter()是内置函数.在python3中,reduce()已不再是 ...

随机推荐

  1. [转帖]VCSA6.7证书过期后的处置方法

    0x00 环境说明 一台测试的ESXI主机,元旦之后已然发现证书已过期,具体现象:VCenter无法登录,一直提示输入用户名和密码,ESXI主机web页面无法登录.重启VC以后,报故障503错误. / ...

  2. [转帖]Optimizing Block Device Parameter Settings of Linux

    https://support.huawei.com/enterprise/en/doc/EDOC1000181485/ddbc0e8b/optimizing-block-device-paramet ...

  3. Windows 修改时间提示: 某些设置已隐藏或由你的组织管理 的解决方案

    最近公司的一台生产服务器时间不对. 因为机器有域控的需求, 所以加入了域, 想改时间时有这样的提示信息: 某些设置已隐藏或由你的组织管理 百度了很久发现没有解决方法.. 但是突然发现可以使用 运行-& ...

  4. [转帖]Intel、海光、鲲鹏920、飞腾2500 CPU性能对比

    https://plantegg.github.io/2021/06/18/%E5%87%A0%E6%AC%BECPU%E6%80%A7%E8%83%BD%E5%AF%B9%E6%AF%94/ Int ...

  5. vscode推荐插件

    js相关的插件 JavaScript (ES6) code snippets Babel ES6/ES7 html css 汉化 Chinese (Simplified) (简体中文) Languag ...

  6. TypeScript中typeof的简单介绍

    简单介绍typeof 我们都知道js提供了typeof,用来获取基本数据的类型. 实际上,TS也提供了 typeof 操作符. 可以在 [类型上下文]中进行类型查询. 只能够进行变量或者属性查询. 定 ...

  7. React中事件的绑定

    事件绑定 语法:on +事件名= { ()=>{ do something }} <!-- 点击事件 --> onClick={ () => { } } 注意的是:React采 ...

  8. 【k哥爬虫普法】Python程序员爬取视频资源13万部,一分钱没挣,获刑2年!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  9. Go 跟踪函数调用链,理解代码更直观

    Go 跟踪函数调用链,理解代码更直观 目录 Go 跟踪函数调用链,理解代码更直观 一.引入 二.自动获取所跟踪函数的函数名 三.增加 Goroutine 标识 四.让输出的跟踪信息更具层次感 五.利用 ...

  10. Git、Github、Gitlab与Gitee

    Git.Github.Gitlab与Gitee之间的关系 Git 是一种版本控制系统,是一个命令,是一种工具,有点像cmd(命令行工具). Github 是一个基于git实现在线代码托管的仓库,向互联 ...