Java, Python — ошибка при использовании Java LinkedList в преобразованном коде Python

#java #python-2.7 #indexing #linked-list #traversal

#java #python-2.7 #индексирование #связанный список #обход

Вопрос:

Я работаю над алгоритмом, который связан с проблемой транспортировки, изначально написанным на Java. Вы можете увидеть исходный код здесь. Я должен преобразовать его в Python.

В приведенном выше связанном источнике есть функция getClosedPath(...)

 static Shipment[] getClosedPath(Shipment s) {
    LinkedList<Shipment> path = matrixToList();
    path.addFirst(s);

    // remove (and keep removing) elements that do not have a
    // vertical AND horizontal neighbor
    while (path.removeIf(e -> {
        Shipment[] nbrs = getNeighbors(e, path);
        return nbrs[0] == null || nbrs[1] == null;
    }));

    // place the remaining elements in the correct plus-minus order
    Shipment[] stones = path.toArray(new Shipment[path.size()]);
    Shipment prev = s;
    for (int i = 0; i < stones.length; i  ) {
        stones[i] = prev;
        prev = getNeighbors(prev, path)[i % 2];
    }
    return stones;
}
  

Я преобразовал его в Python следующим образом:

 def getClosedPath(self, _shipment):
    path = linked_list.LinkedList()
    path.insert(_shipment)

    for e in range(0,path.size()):
        nbrs = self.getNeighbors(path[e], path)
        if nbrs[0] != None and nbrs[1] != None:
            path.delete(path[e])

    stones = []
    prev = _shipment
    for i in range(0, path.size()):
        stones.append(prev)
        prev = self.getNeighbors(prev, path)[i %2]
    return stones
  

Он выдает мне допустимую ошибку nbrs = self.getNeighbors(path[e], path) , т.е. TypeError: объект ‘LinkedList’ не поддерживает индексацию.

Никаких проблем, я хорошо осведомлен о том, что LinkedList не поддерживает индексацию. Я не очень хорошо знаю Python, поэтому я нашел класс Python для LinkedList, доступный здесь, на GitHub, у него нет никаких методов обхода.

Есть идеи, как я могу преобразовать приведенный выше метод Java в Python?

Комментарии:

1. Обязательно ли это должен быть связанный список?

2. На самом деле, я должен преобразовать этот код, написанный на Jave, в Python. Он широко использует Linked-List, поэтому я (оказался) вынужден следовать ему. Я буду рад, если вы предложите какой-либо способ без связанного списка.

3. Я спрашиваю, почему это связанный список, а не какая-либо другая реализация списка. Я имею в виду, что Python не так сложен, что вы не можете определить некоторые параметры, включая расширение реализации списка, чтобы делать то, что вам нужно, если существующие пакеты этого не делают. Но если вам нужна индексация, не похоже, что связанный список будет оптимальным.

4. Как я мог это сделать без списка понравившихся

5. Список — это упорядоченная коллекция. Вопрос в том, почему другая упорядоченная коллекция не будет работать.