Map如何工作

时间:2014-02-23 17:58:55

标签: python python-2.x

我有一行代码:

D = {'h' : 'hh' , 'e' : 'ee'}
str = 'hello'
data = ''.join(map(lambda x:D.get(x,x),str))
print data

这给出了输出 - > hheello

我想了解地图功能如何在这里工作。地图是否包含每个角色 字符串并将其与字典键进行比较,并返回相应的键值?

这对每个角色有什么作用?没有迭代。有更好的例子可以更好地理解这一点吗?

5 个答案:

答案 0 :(得分:2)

没有循环,因为map需要一个“iterable”(即你可以在其上进行迭代的对象)并且循环本身。

map,如果不是本地存在,可以实现为:

def map(f, it):
    return [f(x) for x in it]

或更明确地表示为:

def map(f, it):
    result = []
    for x in it:
        result.append(f(x))
    return result

在Python中,字符串是可迭代的,并且迭代循环遍历字符串中的字符。例如

map(ord, "hello")

返回

[104, 101, 108, 108, 111]

因为这些是字符串中字符的字符代码。

答案 1 :(得分:2)

Map只将函数应用于列表的每个项目。如,

map(lambda x: 10*x, [1,2,3,4])

给出

[10, 20, 30, 40]

答案 2 :(得分:1)

一般来说,地图操作的工作原理如下:

  

MAP(f,L)返回 L'

     

输入:

     
      
  • L n 元素的列表 [e1,e2,...,en]
  •   
  • f 是一个功能
  •   
     

输出

     
      
  • L'是将 f 分别应用于每个元素后的 L 列表: [f(e1),f (e2),...,f(en)]
  •   

因此,在您的情况下,连接操作which operates on lists以空字符串开头,并重复连接以下列方式获得的每个元素 e

  

str 中取一个字符 x ;返回 D.get(x,x)

请注意,上面(这是对地图操作的解释)会给你'hh''ee'输入'h'< / strong>并分别输入'e',同时保留其他字符。

答案 3 :(得分:0)

由于str是一个字符串,map()会将函数(在本例中为lambda)应用于字符串的每个项目。 [map()][2]适用于迭代和序列,因此它可以在字符串中工作,因为string is a sequence

试试这个让你明白这个想法:

str2 = "123"
print map(int, str2)
>>> [1, 2, 3]

在这种情况下,您要将str2中的每个字母转换为int

int("1") -> 1
int("2") -> 2
int("3") -> 3

并将其返回list

[1, 2, 3]

注意:请勿使用Python built-in names作为变量名称。不要使用str作为变量的名称,因为您隐藏了其内置实现。使用str1my_str o,s ...代替。

答案 4 :(得分:0)

它需要str的各个元素。以下是相同实现的可读代码:

D = { 'h' : 'hh' , 'e' : 'ee'}
str = 'hello'
returns = []  # create list for storing return value from function
def myLambda(x): # function does lambda 
    return D.get(x,x)

for x in str: #map==> pass iterable 
    returns.append(myLambda(x)) #for each element get equivalent string from dictionary and append to list

print ''.join(returns) #join for showing result