2015-07-21 94 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