1

これは些細なことです。しかし、私は自分のトリックについて100%確信が持てません。

グラフのノード間のエッジ関係をキャプチャするリストのリストがあります(笑;))。0、1、2、3というラベルの付いた4つのノードを持つ有向グラフがあるとします。エッジは{(0,2)、(0,3)、(1,0)、(1,3)、(2、 1)}なので、隣接関係lol(それを呼び出すa)は

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

私は今、発生率を見つけたいと思います。つまり、どのノードがどのノードにインシデントであるかを示すリストのリストです。この例では、発生率lol(それを呼び出しますb)は次のようになります。

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

次のコードを試しました。

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

これにより、正しい接続行列が得られますb

2番目のステップは機能しますが、理想的には開閉b[j].append(i) for i,x in enumerate(a) for j in xなしで行う必要があります。しかし、Pythonインタープリターはそれなしで構文エラーを叫びます。それを言い表すより良い方法はありますか?[]

4

1 に答える 1

2

あなたの質問は本質的に副作用のためにリスト内包を使用することについてです。たとえば、この質問への回答が言うように、forループ(または複数のループ)に分解するのが次の方法です。

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

また、リスト内包表記は、数学者が行うように、非常に自然で簡単な方法でリストを作成するために使用されることに注意してください。そのため、Pythonでは、構文に角かっこが必要です(あなたの場合)。

于 2013-01-24T21:31:18.877 に答える