复盘:python知识:你知道可迭代对象吗?什么是迭代器?
提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性
关于互联网大厂的笔试面试,都是需要细心准备的
(1)自己的科研经历,科研内容,学习的相关领域知识,要熟悉熟透了
(2)自己的实习经历,做了什么内容,学习的领域知识,要熟悉熟透了
(3)除了科研,实习之外,平时自己关注的前沿知识,也不要落下,仔细了解,面试官很在乎你是否喜欢追进新科技,跟进创新概念和技术
(4)准备数据结构与算法,有笔试的大厂,第一关就是手撕代码做算法题
面试中,实际上,你准备数据结构与算法时以备不时之需,有足够的信心面对面试官可能问的算法题,很多情况下你的科研经历和实习经历足够跟面试官聊了,就不需要考你算法了。但很多大厂就会面试问你算法题,因此不论为了笔试面试,数据结构与算法必须熟悉熟透了
秋招提前批好多大厂不考笔试,直接面试,能否免笔试去面试,那就看你简历实力有多强了。
之前我总结过很多python的知识:
【1】机器学习深度学习面试题——Python基础知识第2篇,续第1篇
【2】机器学习深度学习面试题——Python基础知识
这俩都要仔细看
下面单独跳出互联网大厂最爱考的知识点:
你知道可迭代对象吗?什么是迭代器?
什么是可迭代对象
理解一
Iterable对象,就是可迭代对象,即可以用for…in…进行遍历的对象,就叫可迭代对象。
比如列表,元组,字符串,字典等都属于可迭代对象。
理解二
一个对象如果实现了__iter__方法,那么我们称这个对象是可迭代对象。
什么是迭代器?
理解
一个实现了__iter__方法和__next__方法,并且可以通过__next__方法不断返回下一个值的对象称为Itertor,即迭代器。
也就是说,迭代器均可以使用 for…in… 和next逐一遍历。
迭代器的两个最基本的方法:iter() 和 next().
注意
需要注意的是,列表,元组,字典,集合,字符串均实现了__iter__方法,
但并未实现 __next__方法,所以这些对象~~并不能称为迭代器。~~
迭代器对象
iter()
列表,元组,字符串等对象都可以使用iter()方法来创建迭代器对象。
next()
创建迭代器对象后就**可以使用next()**方法来访问元素
访问迭代器对象都是从第一个元素开始,直到访问结束
迭代器只能往前不会后退
>>> list_1 = [1,2,3]
>>> it_list = iter(list_1)
>>> print(next(it_list))
>>> 1
>>> print(next(it_list))
>>> 2
>>> print(next(it_list))
>>> 3
>>> print(next(it_list))
>>> Traceback (most recent call last):
...
StopIteration
显然,如果访问到迭代器对象的最后一个元素时继续访问,就会触发StopIteration异常
有关迭代的函数
enumerate()
enumerate(iterable, start=0)
用法:
返回一个索引和enumerate对象
参数:
iterable----可迭代对象或迭代器
start----索引值,默认为0
实例:
>>>teams=['勇士', '热火', '骑士']
>>>enumerate(teams)
enumerate object at 0x000002E9569016C0>
>>>for t in enumerate(teams):
print(t, end = ' ')
...
(0, '勇士') (1, '热火') (2, '骑士')
还有就是可以把下标也搞出来
>>>teams=['勇士', '热火', '骑士']
>>>for i, t in enumerate(teams):
print(i, t, end=" ")
...
0 勇士 1 热火 2 骑士
next方法访问
>>>teams=['勇士', '热火', '骑士']
>>>t1 = enumerate(teams)
>>>t1.__next__()
(0, '勇士')
>>>t1.__next__()
(1, '热火')
>>>t1.__next__()
(2, '骑士')
>>>t1.__next__()
Traceback (most recent call last):
...
t1.__next__()
StopIteration
start位置不同,引发的下标不同
>>>teams=['勇士', '热火', '骑士']
>>>t1 = enumerate(teams,2)
>>>t1.__next__()
(2, '勇士')
>>>t1.__next__()
(3, '热火')
>>>t1.__next__()
(4, '骑士')
>>>t1.__next__()
Traceback (most recent call last):
...
t1.__next__()
StopIteration
map()
用法:
该函数用于将一个函数依次映射到可迭代对象的每个元素上,再返回一个map对象
实际上,map对象既是可迭代对象,也是一个迭代器对象
语法:
map(function, iterable, ...)
参数:
function---- 函数
iterable---- 可迭代对象,可以有多个iterable
返回:
该函数返回一个将 function 应用于 iterable 中每一项并输出其结果的迭代器。
当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束
实例:
由于该函数返回的是迭代器,所有我们可以用list()函数将结果转换为列表。
zip()
用法:
将多个迭代器对象(或可迭代对象)中的元素压缩到一起,并返回一个zip对象
实际上,zip对象既是可迭代对象,也是一个迭代器对象
语法:
zip(iterable, ...)
参数:
iterable----可迭代对象,可以有多个。
返回:
该函数在多个iterable上并行迭代,从每个可迭代对象上返回一个数据项组成元组。
也就是说, zip() 返回元组的迭代器,其中第 i 个元组包含的是每个参数迭代器的第 i 个元素。
如图:
需要注意的是:
如果若干个可迭代对象的长度不同,
此时zip() 在最短的迭代完成后停止。
较长可迭代对象中的剩余项将被忽略
如图:
filter()
用法:
传入带有一个参数的函数function,并返回一个filter对象
filter对象中的元素是由参数中的iterable对象使得函数function返回值为True的那些元素组成
通俗讲就是满足function函数条件的那些元素组成了filter对象
实际上,filter对象既是可迭代对象,也是一个迭代器对象
语法:
filter(function, iterable)
参数:
function ----判断函数,用于过滤掉对象里不符合条件的元素
iterable ----可迭代对象,如列表,元组等。
返回:
返回一个新的迭代器,其中的元素都符合判断函数的条件
实例:
我们可以利用list()函数来转换filter()函数的返回值
下一篇,我们讲啥事生成器!
总结
提示:重要经验:
1)可迭代对象,就是要求能用for循环访问的对象,有一个iter()方法
2)迭代器,不仅要求for循环可以访问,通过iter()搞定,还需要通过nex()方法一个一个地将元素吐出来
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。