2015-07-21 44 views
-2

我有列表中的值。將函數列表的清單傳遞給函數

我想發送整個塊到一個轉換函數,然後返回所有在同一結構中轉換後的值。

my_list = [sensor1...sensor4] = [hum1...hum3] = [value1, value2, value3, value4] 

所以,一些嵌套列表

def conversion(my_list): dictionaries 
    for sensor in my_list: 
     for hum in sensor: 
      for value in hum: 
       map(function, value) 

有沒有辦法做一個列表理解爲一個班輪?我不確定如何在解析中使用map函數,特別是當您有多個嵌套迭代時。

+7

......你認爲第一行是幹什麼的? – jonrsharpe

+0

@jonrsharpe psuedocode – cc6g11

+3

它甚至不是僞代碼;爲什麼不提供[mcve] *實際顯示你正在做什麼?* – jonrsharpe

回答

4
map(function, value) 

既然你只是映射每個值的函數,沒有在列表中收集的返回值,使用列表理解是不是一個好主意。你可以用來做,但是你會收集沒有價值的列表項目,只是爲了以後把它們丟掉 - 這樣可以節省幾條實際上有更好用途的線條:清楚地說明發生了什麼,而不是在一條單獨的,漫長而複雜的線條中。

所以我的建議是保持原樣。這樣做更有意義,並清楚地表明發生了什麼。

但是我收集的價值。他們都需要轉換並保存在與原來相同的結構中。

在這種情況下,你還是不想列表理解,因爲這將意味着你創建一個新的列表(沒有真正的理由)。相反,只需更新最內層的列表。要做到這一點,你需要改變你雖然迭代的方式:

for sensor in my_list: 
    for hum in sensor: 
     for i, value in enumerate(hum): 
      hum[i] = map(function, value) 

這將更新內部列表。

另外,由於value實際上是值的列表,你也可以用切片的語法替換value列表的內容

for sensor in my_list: 
    for hum in sensor: 
     for value in hum: 
      value[:] = map(function, value) 

另外一個最後要注意:如果你使用Python 3,記住map返回一個生成器,所以你需要先使用list(map(function, value))將它轉換成列表;或者使用[function(v) for v in value]對該部分使用列表理解。

+0

但我收集的價值。他們都需要轉換並保存在與原來相同的結構中。這意味着在那些嵌套的循環中,我需要將所有東西都傳回鏈中:S高效不是 – cc6g11

+0

值不是一個列表,它們是需要使用函數轉換的實際浮點數 – cc6g11

+0

@ cc6g11您應該*真正*讓您的問題直接。這與您在此說的內容相沖突。在你的問題中,你似乎有一個價值清單,這也是有道理的,因爲你正在調用'map';你不能在一個浮子上調用map。 – poke

0

這是正確的做法。你可以使用列表理解來做到這一點,但你不應該爲代碼的可讀性,因爲它可能不會更快。

+0

*「lisibility」*? – jonrsharpe

+1

@jonrsharpe https://zh.wiktionary.org/wiki/lisible – poke

+0

@jonrsharpe ho ...今天我用英語學習了一些東西。我的意思是可讀性 – FunkySayu