第43讲: Python使用map和filter函数遍历可迭代对象

1.遍历迭代对map和filter函数的区别

map和filter这两个函数都可以根据指定的另外一个函数,从而对指定的可迭代对象(列表、字符串、元组、字典、集合等)进行遍历,然后生产一个新的可迭代对象。

最核心的功能,就是根据指定的一个函数,对可迭代对象中的所有元素进行处理,然后返回一个新的可迭代对象。

两个函数的用法相同,都需要指定两个参数,第一个参数是指定函数名,第二个参数是指定可迭代对象。

map(函数, 可迭代对象)

filter(函数, 可迭代对象)

map函数与filter函数都是根据一个函数对可迭代对象中的所有元素进行处理,那么两者之间有什么区别呢?

  • 调用内置函数map后,会使用指定的函数对指定的可迭代对象中的每个元素,进行遍历处理,然后生成一个新的可迭代对象。
  • 调用内置函数filter后,会使用指定的函数对指定的可迭代对象中的每个元素,进行遍历处理,然后过滤掉函数处理结果为False的元素,生成一个新的可迭代对象。

2.使用map函数对可迭代对象进行遍历

我们前面学的ord函数一次只能对一个字符,返回其对应的ordinal value值,当我们学到map函数后,就可以利用map函数同时对多个字符使用ord函数查询其对应的ordinal value值。

map函数主要是根据它的遍历特性,利用指定的函数,对可迭代对象中的所有元素都进行了一遍处理。

print(map(ord, 'abcde67'))
#map函数返回值是一个迭代器对象  <map object at 0x0000023D0BD8E650>

#可以使用list将其转换成列表格式
print(list(map(ord, 'abcde67')))
#输出结果:[97, 98, 99, 100, 101, 54, 55]

结果如下,map函数根据我们指定的ord函数,对指定的可迭代对象字符串中所有的字符元素都进行了处理,然后使用list函数将其转换成列表。

image-20220815220115591

map函数在遍历的时候其实相当于这样做了:ord(a)、ord(b)、ord©,每次遍历都用指定的函数对可迭代对象中的元素进行了处理。

使用upper函数对字符串中每个字符进行处理,将其转换成的大写字母。

print(list(map(str.upper, 'abcde')))

image-20220815220403943

3.使用filter函数对可迭代对象进行遍历

调用内置函数filter后,会使用指定的函数对指定的可迭代对象中的每个元素,进行遍历处理,然后过滤掉函数处理结果为False的元素,生成一个新的可迭代对象。

filter函数遍历时,指定的函数对可迭代对象中的元素处理后,返回值为True,才会被列出来,返回值为False,则会被过滤掉。

我们可以指定方法str.isalpha,利用map和filter函数对可迭代对象中的元素进行处理,当元素都是字母时,才会返回True,否则就是False,filter函数会过滤掉返回值为Flase的元素。

同样的函数、同样的迭代器对象,我们观察map和filter遍历时,有什么区别。

print(list(map(str.isalpha, ['jiangxl', 'python', '1', '2', '3'])))

print(list(filter(str.isalpha, ['jiangxl', 'python', '1', '2', '3'])))

map函数无论指定的函数与元素处理后,是True还是False都会打印出来,而filter函数只会返回值为True的元素。

image-20220815221059647

猜你喜欢

转载自blog.csdn.net/weixin_44953658/article/details/130635192