减少Python

时间:2015-06-23 14:45:22

标签: python list indexing nodes

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

#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])

然后我们将获得与每个类的节点索引位置相对应的列表列表:

[[[[]]] [[[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],[],[],[],[]]

1 个答案:

答案 0 :(得分:2)

将您的最后一行更改为:

nodeclass[k].extend(nodeindex)

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

  1. indices函数内的列表理解。
  2. 追加电话中的[nodeindex]换行。