Ich habe eine Liste von Python-Objekte:Was ist ein effizienter Weg, um vorherige und nächste Werte einer Schleifenliste von Objekten in Python zurückzugeben?
fruits = [ 'apple', 'orange', 'banana', 'grape', 'cherry' ]
Ich habe derzeit eine for
Schleife in einer Klassenmethode, die „prev_fruit“ und „next_fruit“ Objekte für ein bestimmtes Objekt zurückgibt:
def get_prev_next(self, fruit_list):
prev_fruit = next_fruit = None
fruit_list_length = len(fruit_list)
for idx, fruit in enumerate(fruit_list):
if fruit == self:
if idx > 0:
prev_fruit = fruit_list[idx-1]
if idx < (fruit_list_length-1):
next_fruit = fruit_list[idx+1]
return prev_fruit, next_fruit
Diese funktioniert, obwohl es wahrscheinlich effizientere Möglichkeiten gibt, dies zu tun (worüber ich glücklich bin).
Ich möchte jetzt die Liste optional "Schleifen" (vorher für den ersten Index ist der letzte und der nächste Index für die letzte ist zuerst).
def get_prev_next(self, fruit_list, looping=False):
...
Was ist eine effiziente Möglichkeit, dies auf Listen von Objekten mit 1-10000 Werten zu tun?
„effizient“ ist nicht unbedingt „effizienteste“ als Code Lesbarkeit und Portabilität ist ein Faktor - ich will nicht den Ansatz von sechs Monaten ab jetzt
Sie können die Objekte Teil einer [Linked List] machen (http://stackoverflow.com/questions/280243/python-linked-list)? –
1-10000 Werte ... Sind alle einzigartig? Wenn Sie nach einem Index für einen Wert suchen, spielt es eine Rolle, ob er nur den ersten Wert zurückgibt oder ob Sie alle Vorkommen benötigen. – chapelo
um genauer zu sein, sind die Listen Django-Abfragesätze, die eine Liste von Objekten zurückgeben - die Frage wurde mit dem Wunsch geschrieben, sie etwas generischer zu machen - dh. Das Ändern der Datenstruktur und des Refactorings ist nicht wirklich eine Lösung, die praktikabel ist - die Frage ist nicht, wie man es effizienter macht, sondern wie man es optional effizient macht – mogga