Как следует из комментария, вы проверяете ребра только для того количества строк, которое имеется в вашей матрице смежности, поэтому в общем случае вам не удается достичь многих ребер.Вместо этого рассмотрим следующее:
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
, представляющих количество узлов - как и раньше.