Чтобы улучшить читаемость, вы можете использовать несколько переменных, например
Foo theFoo;
Bar theBar;
Baz theBaz;
theFoo = wsObject.getFoo();
if ( theFoo == null ) {
// Exit.
}
theBar = theFoo.getBar();
if ( theBar == null ) {
// Exit.
}
theBaz = theBar.getBaz();
if ( theBaz == null ) {
// Exit.
}
return theBaz.getInt();
Как следует из комментария, вы проверяете ребра только для того количества строк, которое имеется в вашей матрице смежности, поэтому в общем случае вы не можете достичь многих ребер. Вместо этого рассмотрим следующее:
E = [[0, 0], [0, 1], [1, 0], [1, 1]]
# nodes must be numbers in a sequential range starting at 0 - so this is the
# number of nodes. you can assert this is the case as well if desired
size = len(set([n for e in E for n in e]))
# make an empty adjacency list
adjacency = [[0]*size for _ in range(size)]
# populate the list for each edge
for sink, source in E:
adjacency[sink][source] = 1
>>> print(adjacency)
>>> [[1, 1], [1, 1]]
Если вы хотите быть краткими за счет ясности:
adjacency = [[1 if [i, j] in set(map(tuple, E)) else 0 for j in range(size)] for i in range(size)]
size
, представляющих количество узлов - как и раньше.
Я ниже blv чище и делает свою работу
E= [[0, 0], [0, 1], [1, 0], [1, 1]]
size = max(max(E))+1
r = [[0 for i in range(size)] for j in range(size)]
for row,col in E:
r[row][col] = 1
print(r)