反向索引Python中的列表列表

时间:2013-01-24 20:36:45

标签: python list list-comprehension

这应该是微不足道的。然而,我并不完全确定我的伎俩。

我有一个列表(lol;)),它可以捕获图形节点之间的边缘关系。假设我有一个带有4个节点的定向图,标记为0,1,2,3。边是{(0,2),(0,3),(1,0),(1) ,3),(2,1)}所以邻接lol(称之为a)是

a = [[2,3],[0,3],[1],[]]

我想现在找到发生率lol,即列出哪些节点在哪些节点上发生事件的列表。对于这个例子,发生率lol(称之为b)将是:

[[1], [2], [0], [0, 1]]

我尝试了以下代码:

b = [[],[],[],[]]
[b[j].append(i) for i,x in enumerate(a) for j in x]

这为我提供了正确的关联矩阵b

第二步虽然有效,但理想情况下应为b[j].append(i) for i,x in enumerate(a) for j in x,而不是开放[和关闭]。但Python解释器在没有它的情况下会发出语法错误。有没有更好的方法来表达它?

1 个答案:

答案 0 :(得分:2)

您的问题主要是关于使用列表推导来解决副作用。如,例如the answers to this question说,将其分解为for循环(或循环)是可行的方法:

for i, x in enumerate(a):
    for j in x:
        b[j].append(i)

另外,请注意列表推导用于以非常自然,简单的方式构建列表,就像数学家习惯做的那样。这就是为什么在Python中,语法需要方括号(在你的情况下)。