菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 基础教程
(追記) (追記ここまで)

Python map() 函数

Python 内置函数 Python 内置函数


描述

map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

语法

map() 函数语法:

map(function, iterable, ...)

参数

  • function -- 函数
  • iterable -- 一个或多个序列

返回值

Python 2.x 返回列表。

Python 3.x 返回迭代器。

实例

以下实例展示了 map() 的使用方法:

Python2.x 实例

>>> def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]

# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]

Python3.x 实例

>>> def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
<map object at 0x100d3d550> # 返回迭代器
>>> list(map(square, [1,2,3,4,5])) # 使用 list() 转换为列表
[1, 4, 9, 16, 25]
>>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
>>>

Python 内置函数 Python 内置函数

AI 思考中...

6 篇笔记 写笔记

  1. #0

    刘同学

    thr***[email protected]

    133

    如果函数有多个参数, 但每个参数的序列元素数量不一样, 会根据最少元素的序列进行:

    >>> listx = [1,2,3,4,5,6,7] # 7 个元素
    >>> listy = [2,3,4,5,6,7] # 6 个元素 
    >>> listz = [100,100,100,100] # 4 个元素
    >>> list_result = map(lambda x,y,z : x**2 + y + z,listx, listy, listz)
    >>> print(list(list_result))
    [103, 107, 113, 121]

    明显可以看出是由于 lambda 中的 z 参数,实际是使用了 listz, 而 listz 里面只有 4 个元素, 所以即使 listx 有 7 个元素, listy 有 6 个元素,也不会继续执行了,只执行了 4 个元素的的计算。

    刘同学

    thr***[email protected]

    9年前 (2018年01月17日)
  2. #0

    刘同学

    thr***[email protected]

    42
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    '''
    字典用法扩展: 用字典映射简单的switch case 语句
    其他语言中有switch case用法,但是python中没有,不过可以用字典映射来代替
    如下:
    ------------------伪代码分割线------------------
    # 功能:实现输入数字0-7,打印出相应的英文星期几
    day = 0
    swhitc (day):
    {
     case 0:
     dayName = 'Monday'
     break
     case 1:
     dayName = 'Tuesday'
     break
     case 2:
     dayName = 'Wednesday'
     break
     case 3:
     dayName = 'Thursday'
     break
     case 4:
     dayName = 'Friday'
     break
     case 5:
     dayName = 'Saturday'
     break
     case 6:
     dayName = 'Sunday'
     break
     default:
     dayName = 'Unknow'
    }
    ------------------伪代码分割线------------------
    '''
    '''
    # -----简单的字典映射switch case-----
    # 可用字典映射来实现以上代码的 switch case 功能
    day = 1
    likeswitch = {
     0 : 'Monday',
     1 : 'Tuesday',
     2 : 'Wednesday'
     3 : 'Thursday'
     4 : 'Friday'
     5 : 'Saturday'
     6 : 'Sunday'
    }
    # 这里是用get()方法,是为了在字典中如果没有找到key时,就返回'Unknow',
    # 相当于switch case 中的default
    day_name = likeswitch.get(day,'Unknow') #这里用到了字典中的get()方法.
    print(day_name)
    # 运行结果:Tuesday
    # -----简单的字典映射switch case-----
    '''
    # -----字典映射复杂的switch case----
    # switch中,case下面可以写代码块,其实Python的字典也可以.
    print('请输入您想翻译星期几:')
    userinput = input("输入星期几(如星期一):") #输入 '星期一'
    #userinput = raw_input("输入星期几(如星期一):") # Python2.x
    def translateMonday():
     return 'Monday'
    def translateTuesday():
     return 'Tuesday'
    def translateWednesday():
     return 'Wednesday'
    def translateThursday():
     return 'Thursday'
    def translateFriday():
     return 'Friday'
    def translateSaturday():
     return 'Saturday'
    def translateSunday():
     return 'Sunday'
    def unknow():
     return '请输入正确的信息'
    # 从这里可以得出,字典的value也可以是函数.
    # value的值,直接写函数名
    # 这里的key是字符串,value是函数
    chineseName = {
     '星期一': translateMonday,
     '星期二': translateTuesday,
     '星期三': translateWednesday,
     '星期四': translateThursday,
     '星期五': translateFriday,
     '星期六': translateSaturday,
     '星期日': translateSunday
    }
    # 注意这里的第二个参数也必须是一个函数,否则会报错的.
    # get()方法后面还有一个()
    englishName = chineseName.get(userinput,unknow)()
    print(englishName)
    # 输入信息: 星期一
    # 输出结果: Monday
    # 扩展了字典中 key和value的知识点,value可以是函数,那么就可以用这样的方法来实现比较复杂的业务逻辑了.
    # 完美代替了switch case

    刘同学

    thr***[email protected]

    9年前 (2018年01月19日)
  3. #0

    冷面做的梦

    675***[email protected]

    28

    除了计算幂函数,还可利用 map 函数的映射功能完成其他任务,例如规范名字格式:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    name_list={'tony','cHarLIE','rachAEl'}
    def format_name(s):
     ss=s[0:1].upper()+s[1:].lower();
     return ss;
    print (list(map(format_name,name_list)))
    type(name_list)

    冷面做的梦

    675***[email protected]

    8年前 (2018年05月22日)
  4. #0

    toil and moil

    m18***[email protected]

    38

    filter 是通过生成 True 和 False 组成的迭代器将可迭代对象中不符合条件的元素过滤掉;而 map 返回的则是 True 和 False 组成的迭代器。

    >>> res1 = map(lambda n: n > 5, range(10))
    >>> lt1 = list(res1)
    >>> print(lt1)
    [False, False, False, False, False, False, True, True, True, True]
    >>> res2 = filter(lambda n: n > 5, range(10))
    >>> lt = list(res2)
    >>> print(lt) 
    [6, 7, 8, 9]
    toil and moil

    toil and moil

    m18***[email protected]

    8年前 (2018年08月19日)
  5. #0

    python 中二维数组的转置

    如果 zip(*array) 不经过 x,y,z=zip(*array); 拆分成 x,y,z 三个变量,那么 [[1,4,7],[2,5,8],[3,6,9]];zip(*array) 之后的结果恰好是 [(1, 2, 3), (4, 5, 6), (7, 8, 9)],刚好形成一个转置的关系。这对于所有 array=[[1,2,3],[4,5,6],[7,8,9]]; 的二维数组都是一样的。

    当然 [(1, 2, 3), (4, 5, 6), (7, 8, 9)] 还不是我们需要的最后的结果。

    因为只是一个存放 tuple 的 list,我们要保持原来 list 是存 list 的一致性,所以要应用到上方的 map 函数。

    因此对于一个数组的转置,代码如下:

    >>> array = [[1, 4], [2, 5], [3, 6]];
    >>> map(list, zip(*array));
    [[1, 2, 3], [4, 5, 6]]

    其他实例:

    >>> list(zip([1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
    [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
    >>> list(map(lambda x,y : [x,y], [1,3,5,7,9], [2,4,6,8,10]))
    [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
    8年前 (2018年10月09日)
  6. #0

    楼上 @toil and moil 说的不全对,他的操作中,map 会返回 True 和 False 组成的迭代器的原因在于 lambda 自定义函数的性质:

    >>> r=lambda x:x>=0
    >>> r(1)
    True
    6年前 (2020年08月01日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /