zoukankan      html  css  js  c++  java
  • python map()函数

    原文地址:https://my.oschina.net/zyzzy/blog/115096

    1.对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回

    >>> def add(x):
    ...     return x+100
    ... 
    >>> hh=[11,22,33]
    >>> map(add,hh)
    [111, 122, 133]
    >>> 
    

    就像文档中说的:对hh中的元素做了add,返回了结果的list.

    2.如果给出了额外的可迭代参数,则对每个可迭代参数中的元素‘同列’的应用‘function’。

    >>> def abc(a,b,c):
    ...     return a*100+b*10+c
    ... 
    >>> list1=[11,22,33]
    >>> list2=[44,55,66]
    >>> list3=[77,88,99]
    >>> map(abc,list1,list2,list3)
    [1617, 2838, 4059]
    

    看到同列的效果了吧!在每个list中,取出了下标相同的元素,执行了abc()

    3.如果'function'给出的是‘None’,将结果都存在一个列表里面

    >>> list1=[11,22,33]
    >>> map(None,list1)
    [11, 22, 33]
    >>> list1=[1,2,3]
    >>> list2=[4,5,6]
    >>> list3=[7,8,9]
    >>> map(None,list1,list2,list3)
    [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    

    stackoverflow上有人说可以这样理解map():
    map(f,iterable)
    基本等于
    [f(x) for x in iterable]

    试一下看看结果:

    >>> def add(x):
    ...     return x+100
    ... 
    >>> list1=[11,22,33]
    >>> map(add,list1)
    [111, 122, 133]
    >>> [add(i) for i in list1]
    [111, 122, 133]
    

    结果确实是一样的,但是如果真这样想就不对了

    再看一个例子:

    >>> def add(a,b,c):
    ...     return a*100+b*10+c
    ... 
    >>> list1=[1,2,3]
    >>> list2=[4,5,6]
    >>> list3=[7,8,9]
    >>> map(add,list1,list2,list3)
    [147, 258, 369]
    

    那么如果按照[f(x) for x in iterable]来写呢?

    >>> [add(a,b,c) for a in list1 for b in list2 for c in list3]
    [147, 148, 149, 157, 158, 159, 167, 168, 169, 247, 248, 249, 257, 258, 259, 267, 268, 269, 347, 348, 349, 357, 358, 359, 367, 368, 369]
    

    结果却和上面的不一样了,因为map()只做了列上面的运算,就是对不同的list的同列进行操作(从上面的第二个例子就看出了)

  • 相关阅读:
    AOP
    关于zookeeper部署的个数
    Zookeeper 简介
    Java 正则表达式
    面试记录
    面试题
    Spring Framework官方文档翻译(中英文版)
    java知识巩固
    mysql sql记录
    redis入门
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/7300783.html
Copyright © 2011-2022 走看看