• python学习笔记 map&&reduce


    ---恢复内容开始---

    1.map

    1)map其实相当对吧运算符进行一个抽象,返回的是一个对象,但是这里不知道为什么不可以对一个map返回变量打印两次,难道是因为回收了?

    def f(x):
        return x*x
    
    tmp = map(f,range(6))
    tmps = map(str,range(6))
    print (list(tmp))
    #print (list(tmps))
    print (type(range(6)))#range返回的就是range类型<class 'range'>
    print (set(tmps))
    print(list(tmps))#此时的输出不在是range6的List而是一个空的[]
    

    2)reduce 需要两个以上的参数才能使用,一般是作用域一个list上的,比如下面的求和

    1 tadd = reduce(add,range(6))
    2 print (tadd)
    3 tadd = reduce(add, [x for x in range(6) if x%2 != 0])
    4 print (tadd)
    View Code

    reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)


     1 # -*- coding: utf-8 -*-
     2 """
     3 Spyder Editor
     4 
     5 This is a temporary script file.
     6 """
     7 from functools import reduce
     8 tadd = reduce(add,range(6))
     9 print (tadd)
    10 tadd = reduce(add, [x for x in range(6) if x%2 != 0])
    11 print (tadd)
    12 tadd = reduce(fn,[x for x in range(9) if x%2 != 0])
    13 print (tadd)
    View Code

    3)对于一些版本的简化:

     1 from functools import reduce
     2 def f(x):
     3     return x*x
     4 
     5 def add(x1,x2):
     6     return x1+x2
     7 def fn(x1,x2):
     8     return 10*x1+x2
     9 
    10 def char2num(s):
    11     return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
    12 
    13 def str2int(s):
    14     def char2num(s):
    15         return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
    16         
    17     def fn(x1,x2):
    18         return 10*x1+x2
    19     return reduce(fn,map(char2num,s))
    20 def str2int_2(s):
    21     return reduce(lambda x,y:x*10+y,map(char2num,s))
    22 
    23 tmp = map(f,range(6))
    24 tmps = map(str,range(6))
    25 print (list(tmp))
    26 #print (list(tmps))
    27 print (type(range(6)))#range返回的就是range类型<class 'range'>
    28 print (set(tmps))
    29 print(list(tmps))#此时的输出不在是range6的List而是一个空的[]
    30 
    31 tadd = reduce(add,range(6))
    32 print (tadd)
    33 tadd = reduce(add, [x for x in range(6) if x%2 != 0])
    34 print (tadd)
    35 tadd = reduce(fn,[x for x in range(9) if x%2 != 0])
    36 print (tadd)
    37 print (reduce(fn,(map(char2num,'213'))))
    38 print (str2int('1231'))
    39 print (str2int_2('321'))
    View Code

    ---恢复内容结束---

  • 相关阅读:
    Android源码学习之如何使用eclipse+NDK
    Android NDK 工具链的使用方法(Standalone Toolchain)
    gcc和g++的区别
    OCP-1Z0-051-V9.02-42题
    OCP-1Z0-051-V9.02-41题
    OCP-1Z0-051-V9.02-40题
    OCP-1Z0-051-V9.02-39题
    windows下自动生成文件夹下所有JNI所需的.h头文件
    OCP-1Z0-051-V9.02-38题
    Oracle DB 视图
  • 原文地址:https://www.cnblogs.com/silence-tommy/p/6536889.html
Copyright © 2020-2023  润新知