Python 中列表维度的减少

Reduction of list dimensions in Python

我正在尝试将 classes 分配给节点列表,并根据 class 标记将所有节点分成单独的列表。例如,如果我们有以下代码:

#define number of classes
MaxC=5
index=[4 4 5 1 4 1 4 5 4 4 3 1 3 3 1 1]
def indices(index,func):
    return[v for (v,val) in enumerate(index) if func(val)]

##Create node classes
nodeclass=[[],[],[],[],[],[],[],[],[],[]]
for k in range(0,MaxC):
    nodeindex=indices(index, lambda p:p==k)
    nodeclass[k].append([nodeindex])

然后我们会得到每个class:

对应节点索引位置的list列表
[[[[]]] [[[3, 5, 11, 14, 15]]] [[[]]] [[[10, 12, 13]]]
 [[[0, 1, 4, 6, 8, 9]]] [] [] [] [] []]

然而,这个结果产生了列表上的列表上的列表上的列表。当我想遍历节点索引位置时,这在我的脚本中成为一个问题,但由于迭代器正在接收列表而不是单个元素而收到返回的错误。

TL;DR:有没有一种方法可以更有效地生成这些索引位置,这样我就不会收到列表列表?在最坏的情况下,如果这不可能,如何将列表展平为以下形式:

[[],[3,5,11,14,15],[],[10,12,13],[0,1,4,6,8,9],[],[],[],[]]

将最后一行更改为:

nodeclass[k].extend(nodeindex)

您正在创建的两个额外列表包装发生在:

  1. indices 函数中的列表理解。
  2. [nodeindex] 包裹在追加调用中。