2016-09-28 50 views
1

這個問題可能很簡單,但它會幫助我理解循環和地圖之間的區別。 在我設法從改變第一個例子:如何將地圖更改爲循環?

nrs = list(map(lambda x: int(open("img_" + str(x) + ".csv").readline().split(",")[1]) , range(82)) 

到:

nrs = [] 
    for x in range(82): 
     nrs.append(int(open("img_" + str(x) + ".csv").readline().split(",")[1])) 

,但我怎麼可以改變:

plt.plot(list(map(lambda x: ages[x], list(avg_si.keys()))), list(avg_si.values()), 'ro', label='size') 

成一個圈? 我試着用:

srednia = [] 
for x in list(avg_si.values()): 
    srednia.append(ages[x], list(avg_si.keys())) 
plt.plot(srednia, "ro", label = "size") 

但我得到一個KeyError異常

+1

你能發佈你得到的完整錯誤追溯嗎? – glibdud

+1

將「地圖」更改爲列表理解更加pythonic。即使你想把它變成一個循環,首先將它改爲理解是一個合理的中間步驟。 –

+0

@glibdud' 文件 「C:/Users/misha/Documents/dae/dokument.py」,線路52,在 srednia.append(年齡[X],列表(avg_si.keys())) KeyError異常:2.5355913274647888' – mishakisha

回答

0

你應該遍歷鍵,而不是值。

srednia = [] 
    for x in list(avg_si.keys()): 
     srednia.append(ages[x], list(avg_si.values())) 
    plt.plot(srednia, "ro", label = "size") 
+0

我得到了: TypeError:append()只需要一個參數(給出2) – mishakisha

+0

'list(avg_si.values())'不是'map'表達式的一部分。它只是函數plt.plot()的一個參數 –

0

表達

plt.plot(list(map(lambda x: ages[x], list(avg_si.keys()))), list(avg_si.values()), 'ro', label='size') 

是有點難以解析。除了最後兩個字符串參數要傳遞這兩個列表:

1) list(map(lambda x: ages[x], list(avg_si.keys()))) 
2) list(avg_si.values()) 

第二個列表需要無可奉告。第一個是map表達式。它等同於以下列表理解:

[ages[x] for x in avg_si.keys()] 

如果你想更換一個循環的理解,你可以做到這將使整個線路相當於

plt.plot([ages[x] for x in avg_si.keys()], list(avg_si.values()), 'ro', label='size') 

ageList = [] 
for x in avg_si.keys(): 
    ageList.append(ages[x]) 

然後:

plt.plot(ageList, list(avg_si.values()), 'ro', label='size')