通过列表列表来运行

时间:2015-07-21 14:17:18

标签: python list dictionary

我在列表列表中有值。

我想将整个块发送到转换函数,然后在同一结构中返回所有转换后的值。

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函数,尤其是当你有几个嵌套迭代时。

2 个答案:

答案 0 :(得分: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]对该部分使用列表理解。

答案 1 :(得分:0)

这是正确的方法。你可以使用列表理解来做到这一点,但你不应该考虑代码的可读性,因为它可能不会更快。