我在列表列表中有值。
我想将整个块发送到转换函数,然后在同一结构中返回所有转换后的值。
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函数,尤其是当你有几个嵌套迭代时。
答案 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)
这是正确的方法。你可以使用列表理解来做到这一点,但你不应该考虑代码的可读性,因为它可能不会更快。