Предположим, у меня есть следующий массив numpy
:
arr = numpy.array([[1, 7], [2, 0], [2, 1], [2, 3], [3, 4], [3, 5], [5, 6]])
Предположим, я выбрал определенный ключ, в данном случае 2
.Тогда я бы хотел, чтобы сортировка была следующей:
arr_sorted = [[2, 0], [2, 1], [2, 3], [1, 7], [3, 4], [3, 5], [5, 6]]
Идея состоит в том, чтобы сначала начать со всех элементов с ключом, равным 2, а затем перейти к записям, ключи которых были значениями предыдущего ключа.
Начиная с 2, записи [2, 0], [2, 1], [2, 3]
.Следовательно, следующие ключи после 2 будут 0, 1, 3. Нет записей с 0 в качестве ключа.Существует одна запись с ключом 1: [1, 7]
.Есть две записи с ключом 3: [3, 4], [3, 5]
.Следующий необработанный ключ - 7
, но в нем нет записей.То же самое для 4. Есть одна запись с 5 в качестве ключа: [5, 6]
.6 не имеет записей.
Есть ли какие-нибудь хитрости numpy
или dictionary
для достижения этой цели?
Моя ближайшая попытка следующая:
def bfs_finder(d, start):
queue = deque([start])
seen = [start]
results = []
while queue:
_vertices = queue.popleft()
current = [i for i, a in enumerate(d) if len([x for x in a if x in _vertices])==1 and i not in seen]
curr1 = [a[1] for i, a in enumerate(d) if len([x for x in a if x in _vertices]) == 1 and i not in seen]
if len(current)>0:
results.extend(curr1)
queue.extend(curr1)
seen.extend(current)
return results
Но,Я на самом деле получаю ошибку current = [i for i, a in enumerate(d) if len([x for x in a if x in _vertices])==1 and i not in seen]
TypeError: argument of type 'int' is not iterable
.Будем весьма благодарны за любые предложения о том, как исправить эту ошибку, а также о каких-либо хороших улучшениях.