iterieren python-verschachtelte Listen effizient
Arbeite ich an einem Netzwerk-traffic-monitor-Projekt in Python. Nicht, dass vertraut mit Python, so Suche ich hier Hilfe.
Kurz gesagt, ich bin Sie beide in-und out-traffic, schrieb ich es auf diese Weise:
for iter in ('in','out'):
netdata = myhttp()
print data
netdata ist eine Liste, bestehend aus verschachtelten Listen, das format ist wie folgt:
[ [t1,f1], [t2,f2], ...]
Hier t
ist der moment, und f
ist der flow. Aber ich möchte nur zu halten, diese f zu diesem Zeitpunkt für beide in und aus, ich Frage mich, jeden Weg zu einem effizienten code.
Nach einigem suchen, ich glaube, ich brauche zu verwenden, erstellen Sie eine Liste, der traffic(2-Elemente), dann mit der zip-Funktion zum Durchlaufen der beiden Listen in der gleichen Zeit, aber ich habe Schwierigkeiten beim schreiben einer richtigen. Da mein netdata ist eine sehr lange Liste, die Effizienz ist auch sehr wichtig.
Wenn es etwas verwirrend, lassen Sie mich wissen, ich werde versuchen das zu klären.
Danke für die Hilfe
InformationsquelleAutor Jin | 2013-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abgesehen von kleineren Korrekturen, die auf Ihren code (die Fragen von @Null Piräus), deine Frage wurde wohl beantwortet hier. Eine mögliche code zum Durchlaufen einer Liste von Listen in N-Grad (ein Baum), ist die folgende:
Beispiel:
Den Schlüssel zu machen, arbeiten, ist die Rekursion und der Schlüssel zu machen, arbeiten, effizient ist, mit einem generator (Stichwort
yield
gibt den Tipp). Der generator wird die Iteration durch die Liste der Listen eine Rückkehr zu Sie Element für Element, ohne das kopieren von Daten oder erstellen Sie eine ganz neue Liste (es sei denn, Sie verbrauchen die gesamte generator-Zuweisung des Ergebnisses zu einer Liste, wie in meinem Beispiel)Verwendung von Iteratoren und Generatoren können seltsam sein, Konzepte zu verstehen (Stichwort
yield
vor allem). Kasse diesem tolle Antwort zu verstehen, SieInformationsquelleAutor Bruno Penteado
Den code, den Sie gezeigt haben, macht nicht sehr viel Sinn. Hier ist, was es tut:
Durchlaufen der Sequenz
'in', 'out'
, zuweisen von jeder der beiden strings wiederum auf die variableiter
(Maskierung der built-in Funktioniter()
im Prozess) auf zwei Durchläufe durch die Schleife.Komplett ignorieren den Wert
iter
innerhalb der Schleife.Weisen Sie das Ergebnis der
myhttp()
auf die variablenetdata
auf jedem Durchgang durch die Schlaufe.Komplett ignorieren den Wert
netdata
, und stattdessen versuchen, zu drucken undefined variabledata
bei jedem Durchlauf durch die Schleife.Ist es möglich, angesichts der verschachtelten Liste, die Sie beschreiben, dass Sie wollen, dass so etwas wie dieses:
InformationsquelleAutor Zero Piraeus
Wenn Sie versuchen, eine der anderen Antworten, die Funktion war nicht in der Lage zu Durchlaufen, und so habe ich es geändert, um nicht recurse. Es funktioniert immer noch Recht schnell, und kann mit großen verschachtelten Listen (zumindest so weit wie ich kann sagen, mit meinen Tests). Es ist ein in Python 3 nur Funktion.
InformationsquelleAutor nike4613