我有一行代码是:
1 2 3 4 | D = {'h' : 'hh' , 'e' : 'ee'} str = 'hello' data = ''.join(map(lambda x:D.get(x,x),str)) print data |
这给出了一个输出-> hheello
我试图理解map函数是如何工作的。地图取每个字符的将字符串与dictionary key进行比较,并返回相应的key值?
它是如何处理这里的每个字符的?没有迭代。有没有更好地理解这一点的好例子?
Map只是将该函数应用于列表中的每一项。例如,
1 | map(lambda x: 10*x, [1,2,3,4]) |
给了
1 | [10, 20, 30, 40] |
没有循环,因为
1 2 | def map(f, it): return [f(x) for x in it] |
或者,更明确地说,如:
1 2 3 4 5 | def map(f, it): result = [] for x in it: result.append(f(x)) return result |
在Python中,字符串是可迭代的,并且在迭代时对字符串中的字符进行循环。例如
1 | map(ord,"hello") |
返回
1 | [104, 101, 108, 108, 111] |
因为这些是字符串中字符的字符代码。
一般来说,map操作是这样工作的:
MAP (f,L) returns L'
Input:
L is a list of n elements [ e1 , e2 , ... , en ]
f is a functionOutput
L' is the list L after the application of f to each element individually: [ f(e1) , f(e2) , ... , f(en) ]
所以,在您的例子中,join操作,它对列表进行操作,以空字符串开始,并重复连接以以下方式获得的每个元素e:
Take a character x from str; return D.get(x,x)
请注意,上面(这是map操作的解释)将分别给出'hh'和'ee',并输入'h'和'e',而其他字符将保持原样。
它采用str的各个元素。下面是相同实现的可读代码:
1 2 3 4 5 6 7 8 9 10 | 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 |
由于
试试这个,你就会明白了:
1 2 3 | str2 ="123" print map(int, str2) >>> [1, 2, 3] |
在这种情况下,您将
1 2 3 | int("1") -> 1 int("2") -> 2 int("3") -> 3 |
然后以
1 | [1, 2, 3] |
注意:不要使用Python内置的名称作为变量的名称。不要使用