我有一行代码:
D = {'h' : 'hh' , 'e' : 'ee'}
str = 'hello'
data = ''.join(map(lambda x:D.get(x,x),str))
print data
这给出了输出 - > hheello
我想了解地图功能如何在这里工作。地图是否包含每个角色 字符串并将其与字典键进行比较,并返回相应的键值?
这对每个角色有什么作用?没有迭代。有更好的例子可以更好地理解这一点吗?
答案 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
作为变量的名称,因为您隐藏了其内置实现。使用str1
,my_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