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')]