我正在尝试将类分配给节点列表,并根据类标记将所有节点分成单独的列表。例如,如果我们有以下代码:
#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],[],[],[],[]]
答案 0 :(得分:2)
将您的最后一行更改为:
nodeclass[k].extend(nodeindex)
您正在创建的两个额外列表包装正在发生:
indices
函数内的列表理解。[nodeindex]
换行。