NO.7 迭代
- 一、介绍
- 二、判断迭代对象
- 1. all()函数--判断可迭代对象是否包括假值
- 2. any()函数--判断可迭代对象是否全是假值
- 三、过滤、查找、排序、操作、反转
- 1.⭐filter()函数--指定条件过滤
- 2.next()函数--返回迭代器的下一个元素
- 3.map()函数--通过函数实现对可迭代对象的操作
- 4.sorted()函数--可迭代对象排序
- 5.reversed()函数--可迭代对象反转
- 四、生成、打包
- 1.iter()函数--生成迭代器
- 2.zip()函数--将可迭代对象打包成元组
一、介绍
迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。
for 用来实现迭代,它的结构是 for … in …,其在迭代时会产生迭代器,实际是将可迭代对象转换成迭代器,再重复调用 next() 方法实现的。
可迭代对象:通常是序列、字典、集合等。
他们的特点就是:
①可以 for 循环: for i in iterable;
②可以按 index 索引的对象,也就是定义了 getitem 方法,比如 list,str;
定义了__iter__ 方法,可以随意返回;
③可以调用 iter(obj) 的对象,并且返回一个iterator。
二、判断迭代对象
1. all()函数–判断可迭代对象是否包括假值
除了0、空、False以外的值都属于真值。
包括假值all()返回False,否则为True
语法:all(iterable)
iterable:必须是可迭代对象
如果可迭代对象中的元素个数为0,比如空列表、空字典、空元组等,返回值还是True
set1 = {2,4,6,0}
print(all(set1))
结果:
False
2. any()函数–判断可迭代对象是否全是假值
全为假值返回False,否则为True
语法:any(iterable)
如果可迭代对象中的元素个数为0,比如空列表、空字典、空元组等,返回值是False
三、过滤、查找、排序、操作、反转
1.⭐filter()函数–指定条件过滤
filter()函数把传入的函数一次作用域每个元素,根据返回值True或者False来决定保留或者丢弃该元素
语法:filter(function,iterable)
返回值是一个迭代器对象
def evennumber(num):
return num % 2 == 0
newlist = filter(evennumber,range(20))
print(list(newlist))
结果:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
2.next()函数–返回迭代器的下一个元素
next()函数以迭代器为参数,每次调用返回迭代器中的下一个元素
语法:next(iterator,default)
default: 可选参数,用来设置在没有下一个元素时返回的值
返回值:迭代器中的下一个元素
3.map()函数–通过函数实现对可迭代对象的操作
map()函数接受一个函数和任意个可迭代对象为参数,返回一个迭代器。该迭代器中所有元素都是函数依次作用于可迭代对象的结果。
语法:map(function,iterable...)
返回值:迭代器
def operatenum(num):
return num*2
list1 = [1,2,3]
print(list(map(operatenum,list1)))
结果:
[2, 4, 6]
4.sorted()函数–可迭代对象排序
对可迭代对象排序并返回一个冲虚排序的列表
语法:sorted(iterable , key = None , reverse = False)
5.reversed()函数–可迭代对象反转
返回一反转的可迭代对象
语法:reversed(seq)
四、生成、打包
1.iter()函数–生成迭代器
语法:iter(object)
返回值:一个迭代器对象
a = iter('dk')
print(a)
print(next(a))
print(next(a))
结果:
<str_iterator object at 0x0000014FD7FEF808>
d
k
2.zip()函数–将可迭代对象打包成元组
语法:zip(iterable1,iterable2...)
list1 = [1,2,3]
list2 = [8,9,10]
list3 = ['a','b','c']
print(list(zip(list1)))
print(list(zip(list1,list2)))
print(list(zip(list1,list2,list3)))
结果:
[(1,), (2,), (3,)]
[(1, 8), (2, 9), (3, 10)]
[(1, 8, 'a'), (2, 9, 'b'), (3, 10, 'c')]