#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. Список — это упорядоченная коллекция. Вопрос в том, почему другая упорядоченная коллекция не будет работать.