这应该是微不足道的。然而,我并不完全确定我的伎俩。
我有一个列表(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解释器在没有它的情况下会发出语法错误。有没有更好的方法来表达它?
答案 0 :(得分:2)
您的问题主要是关于使用列表推导来解决副作用。如,例如the answers to this question说,将其分解为for循环(或循环)是可行的方法:
for i, x in enumerate(a):
for j in x:
b[j].append(i)
另外,请注意列表推导用于以非常自然,简单的方式构建列表,就像数学家习惯做的那样。这就是为什么在Python中,语法需要方括号(在你的情况下)。