zoukankan      html  css  js  c++  java
  • python--map()、reduce()

      map()和reduce()是一种在处理大数据时的重要思想,在平时也可以利用。在python中内置了这两个方法,map取映射的意思,reduce取归纳的意思。

    一、map()

    • map(func, lsd)

      参数1是函数
      参数2是序列

    • 功能:将传入的函数依次作用在序列中的每一个元素,并把结果作为一个新的Iterator返回。

      注:可迭代对象是个惰性的列表,直接输出为一个地址,要想输出里面内容要显示的写出来,eg:print(list(res))

     1 # 下面实例的目标是将列表中的字符转换为整形
     2 
     3 def char2int(chr):
     4     return {'0':0, '1':1, '2':2, '3':3}[chr] # 通过字典来返回转换后的结果
     5 
     6 lis = ['2','1','3','0']
     7 res = map(char2int, lis) # 用自己写的函数映射到每个元素上
     8 res2 = map(int, lis) # 通过内置函数来实现
     9 print(res) # 惰性列表,返回一个内存地址
    10 print(list(res)) # 强制转换成列表
    11 print(list(res2))

    二、ruduce()

    • reduce(func, lsd)

      参数1是函数
      参数2是序列

      注:reduce需要引入:from functools import reduce

    • 功能:一个函数作用在序列上,这个函数必须接受两个参数,reduce把结果继续和序列的下一个元素累积运算。
      • eg:  reduce(f, [a,b,c,d]) 等价于f(f(f(a,b),c),d) ----f是一个接受两个参数的函数。
     1 # 实现一个累加
     2 
     3 from functools import reduce
     4 # 自定义的两输入加法
     5 def Sum(a,b):
     6     return a + b
     7 lis = [1,2,3,4,5]
     8 
     9 res = reduce(Sum, lis) # 对序列中的元素类似递归的加进去
    10 print(res) # 由于reduce返回的只是一个结果,不必考虑map中提到的问题

    三、综合

      map、reduce经常是配合起来使用的,下面有一个简单的例子,例子旨在介绍如何使用,无需关心是否实用。

     1 # 这段代码是想要将一段数字的字符串转换为整型
     2 
     3 from functools import reduce # 引入reduce方法
     4 
     5 def str2int(str):
     6         # reduce中使用的函数,将map转换后的列表中元素,生成按顺序排列的整型数字
     7     def fc(x,y):
     8         return x * 10 + y
     9         # 把字符串中每个元素转换成对应的整型数字,返回一个整型的列表
    10     def fs(chr):
    11         return {'0':0, '1':1, '2':2, '3':3,'4':4, '5':5, '6':6, '7':7, '8':8, '9':9}[chr]
    12     return reduce(fc, map(fs,list(str))) # 先使用map函数把每个元素转成数字,然后用reduce函数把数字拼接起来
    13 res = str2int('2314233123')
    14 print(res)
    作者:渔单渠 微信搜索“小田学Python”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    简单的测试用例计划放法
    黑盒测试用例设计方法-等价类划分
    Redis净化板
    爬虫部署与Django
    怎样实现前端的优化
    关于Apache简介笔记
    yield生成器的经典案例
    石头剪刀布
    函数内是否可以修改传递进来的列表
    不定长参数的传递
  • 原文地址:https://www.cnblogs.com/yudanqu/p/9365943.html
Copyright © 2011-2022 走看看