
目录1. map —— 映射2. filter —— 过滤3. sorted —— 排序4. reduce —— 规约/累积5. zip —— 拉链/配对综合示例总结1.map—— 映射作用对可迭代对象中的每个元素应用同一个函数返回一个迭代器。语法map(function, iterable, ...)注意返回的是迭代器可用list()转换为列表可以同时处理多个可迭代对象函数接收几个参数就传几个可迭代对象长度以最短的可迭代对象为准示例# 把列表中所有数字平方nums[1,2,3,4,5]squaredmap(lambdax:x**2,nums)print(list(squared))# [1, 4, 9, 16, 25]# 多个可迭代对象对应位置相加a[1,2,3]b[10,20,30]summedmap(lambdax,y:xy,a,b)print(list(summed))# [11, 22, 33]# 用内置函数words[hello,world]upper_wordsmap(str.upper,words)print(list(upper_words))# [HELLO, WORLD]2.filter—— 过滤作用根据判断函数的真假筛选出可迭代对象中符合条件的元素。function返回True则保留该元素语法filter(function, iterable)注意如果functionNone则直接去掉所有假值0, , None, False, []等示例# 过滤出偶数nums[1,2,3,4,5,6,7,8]evensfilter(lambdax:x%20,nums)print(list(evens))# [2, 4, 6, 8]# 过滤空字符串strings[hello,,world,,python]non_emptyfilter(lambdas:len(s)0,strings)print(list(non_empty))# [hello, world, python]# 过滤掉 Nonedata[1,None,3,None,5]cleanfilter(lambdax:xisnotNone,data)print(list(clean))# [1, 3, 5]# 用 None 作为函数过滤掉所有假值0, , None, False 等mixed[0,1,,hello,False,True,None]truthyfilter(None,mixed)print(list(truthy))# [1, hello, True]3.sorted—— 排序作用对可迭代对象进行排序。语法sorted(iterable, keyNone, reverseFalse)说明返回一个新列表原对象不变区别于list.sort()原地排序key参数接收一个函数作用到每个元素上按作用后的结果排序稳定排序相同 key 值的元素保持原始顺序示例# 基础排序nums[3,1,4,1,5,9,2,6]print(sorted(nums))# [1, 1, 2, 3, 4, 5, 6, 9]# 按绝对值排序nums[3,-1,4,-5,2]print(sorted(nums,keyabs))# [-1, 2, 3, 4, -5]# 按字符串长度排序words[banana,apple,kiwi,pear,orange]print(sorted(words,keylen))# [kiwi, pear, apple, banana, orange]# 先按长度再按字母元组排序print(sorted(words,keylambdas:(len(s),s)))# [kiwi, pear, apple, banana, orange]# 降序print(sorted(nums,reverseTrue))# [4, 3, 2, -1, -5]# 对字典按 value 排序d{a:3,b:1,c:2}sorted_itemssorted(d.items(),keylambdax:x[1])print(sorted_items)# [(b, 1), (c, 2), (a, 3)]4.reduce—— 规约/累积作用对可迭代对象中的元素反复应用一个二元函数将序列缩减为一个值。语法functools.reduce(function, iterable, initializerNone)示例fromfunctoolsimportreduce# 累加求和nums[1,2,3,4,5]totalreduce(lambdax,y:xy,nums)print(total)# 15# 执行过程((((12)3)4)5) 15# 累乘productreduce(lambdax,y:x*y,nums)print(product)# 120# 找最大值max_valreduce(lambdax,y:xifxyelsey,nums)print(max_val)# 5# 带初始值nums[1,2,3]totalreduce(lambdax,y:xy,nums,10)print(total)# 16 (10 1 2 3)# 字符串拼接words[Hello, ,World,!]sentencereduce(lambdax,y:xy,words)print(sentence)# Hello World!# 列表扁平化nested[[1,2],[3,4],[5,6]]flatreduce(lambdax,y:xy,nested)print(flat)# [1, 2, 3, 4, 5, 6]特点需要从functools导入执行过程f(...f(f(init, seq[0]), seq[1]), ...seq[n-1])有initializer时先从它开始累积空序列不带初始值会报错5.zip—— 拉链/配对作用将多个可迭代对象并行打包对应位置的元素组成元组。语法zip(iterable1, iterable2, ...)示例# 两列表配对names[Alice,Bob,Charlie]ages[25,30,35]pairedzip(names,ages)print(list(paired))# [(Alice, 25), (Bob, 30), (Charlie, 35)]# 多列表配对a[1,2,3]b[10,20,30]c[100,200,300]print(list(zip(a,b,c)))# [(1, 10, 100), (2, 20, 200), (3, 30, 300)]# 长度不一致以最短为准x[1,2,3,4]y[a,b,c]print(list(zip(x,y)))# [(1, a), (2, b), (3, c)] 4 被丢弃# 创建字典keys[name,age,city]values[Alice,25,Shanghai]ddict(zip(keys,values))print(d)# {name: Alice, age: 25, city: Shanghai}# 同时遍历多个列表names[Alice,Bob,Charlie]scores[85,92,78]forname,scoreinzip(names,scores):print(f{name}:{score})# Alice: 85# Bob: 92# Charlie: 78特点返回迭代器用list()或循环消费长度取最短的可迭代对象严格模式用zip_longestzip(*zipped)可以解压缩还原相当于转置常用于并行遍历、构建字典、矩阵转置# 解压缩pairs[(1,a),(2,b),(3,c)]nums,letterszip(*pairs)print(nums)# (1, 2, 3)print(letters)# (a, b, c)综合示例fromfunctoolsimportreduce# 数据students[{name:Alice,math:85,english:90},{name:Bob,math:78,english:85},{name:Charlie,math:92,english:88},]# 1. map: 给每人加一个 total 字段students_with_totallist(map(lambdas:{**s,total:s[math]s[english]},students))# 2. filter: 筛选 total 170top_studentslist(filter(lambdas:s[total]170,students_with_total))# 3. sorted: 按 total 降序排列rankedsorted(top_students,keylambdas:s[total],reverseTrue)# 4. zip: 提取名字和总分names[s[name]forsinranked]scores[s[total]forsinranked]rankinglist(zip(range(1,len(names)1),names,scores))# 5. reduce: 计算平均总分avg_totalreduce(lambdax,y:xy,scores)/len(scores)print(排名:,ranking)print(平均总分:,avg_total)# 排名: [(1, Charlie, 180), (2, Alice, 175)]# 平均总分: 177.5总结函数用途输入输出map(f, iter)对每个元素应用函数函数 可迭代对象新迭代器filter(f, iter)筛选符合条件的元素函数 可迭代对象新迭代器sorted(iter, key)排序可迭代对象 key 函数新列表reduce(f, iter)累积计算为单个值二元函数 可迭代对象单个值zip(*iters)并行配对多个可迭代对象元组迭代器