如何将函数映射到三重嵌套列表并保持三重嵌套列表完整?

时间:2011-09-01 16:11:57

标签: list nested python

我一直在为我的博士构建分析工作流程,并且一直使用三重嵌套列表来表示我的数据结构,因为我希望它能够在第二和第三级扩展到任意数量的数据。第一级是整个数据集,第二级是数据集中的每个主题,第三级是每个主题的每个度量的行。

[dataset]
      |
      [subject]
              |
              [measure1, measure2, measure3]

我正在尝试将函数映射到每个度量 - 例如将所有点转换为浮点数或用None替换异常值 - 并希望根据其嵌套返回整个数据集但是我当前的代码:

for subject in dataset:
    for measure in subject:
        map(float, measure)

...结果是正确的,正是我想要的,但问题是我无法想到如何有效地将结果分配回数据集或不丢失嵌套级别。理想情况下,我希望它能够改变措施* 到位,但我想不出怎么做。

你能建议一种有效率和pythonic的方法吗?三重嵌套列表是一种在程序中组织数据的愚蠢方式吗?

4 个答案:

答案 0 :(得分:14)

而不是在适当的位置创建新列表

 dataset = [[[float(value) for value in measure] 
                           for measure in subject] 
                           for subject in dataset] 

答案 1 :(得分:3)

return [[map(float, measure) for measure in subject] for subject in dataset]

您可以返回列表而不是更改它 - 这仍然非常有效并保留了您想要的所有信息。 (旁白:事实上,它通常比分配列表索引更快[需要引证],这是其他人在这里建议的!)

答案 2 :(得分:2)

这样做的直接方法是:

for subject in dataset:
    for measure in subject:
        for i, elem in enumerate(measure):
            measure[i] = float(elem)

或者,使用切片运算符使用map

的结果就地更新列表
for subject in dataset:
    for measure in subject:
        measure[:] = map(float, measure)

答案 3 :(得分:2)

这应该做的工作

for subject in dataset:
    for measure in subject:
        for i, m in enumerate(measure):
            measure[i] = float(m)