2014-02-23 24 views
3

我有一行代碼是:如何地圖工作

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

這給出了一個輸出 - > hheello

我想了解如何在這裏做地圖功能的工作。映射是否將字符串 的每個字符與字典鍵進行比較,並返回相應的鍵值?

這對每個角色在這裏如何做?沒有迭代。有沒有什麼好的例子可以更好地理解這一點?

回答

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 
2

沒有循環,因爲map需要一個「迭代」(即可以迭代的對象)並執行循環本身。

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] 

,因爲這些都是對字符串中的字符的字符代碼。

2

地圖只是將函數應用於列表中的每個項目。例如,

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

[10, 20, 30, 40] 
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 ...。

1

一般來說,地圖操作是這樣的:

MAP(F,L)回報L」

輸入:

  • LÑ元件列表[E1,E2,...,EN]
  • ˚F是一個函數

輸出

  • L」是列表Lf分別應用於每個元素後:[F(E1),F(E2),...,F(EN)

所以,在你的情況下,連接操作,which operates on lists,開始與空字符串和反覆連接每個元素Ë通過以下方式獲得:

採取一個字符XSTR;返回D.get(X,X)

注意的是,上述(其在地圖上的操作的說明)會給你'HH''EE'與輸入1 H '和輸入'e'分別,而它將離開其他字符,因爲它們。