文章目录
- 1.遍历迭代对map和filter函数的区别
- 2.使用map函数对可迭代对象进行遍历
- 3.使用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函数将其转换成列表。
map函数在遍历的时候其实相当于这样做了:ord(a)、ord(b)、ord©,每次遍历都用指定的函数对可迭代对象中的元素进行了处理。
使用upper函数对字符串中每个字符进行处理,将其转换成的大写字母。
print(list(map(str.upper, 'abcde')))
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的元素。