PYTHON, wie die Suche eine text-Datei für eine Zahl
Gibt es eine text-Datei, die ich lese Zeile für Zeile. Es sieht wie folgt aus:
3
3
67
46
67
3
46
Jedes mal, wenn das Programm auf eine neue Nummer, schreibt es in eine Textdatei. Die Art und Weise ich ' m denken, dies zu tun ist, Schreibe die erste Zahl auf die Datei, dann auf die zweite Zahl und die überprüfung, ob es bereits in der Ausgabe-Datei. Falls nicht, schreibt es, DASS die Zahl an den Dateinamen an. Wenn es ist, es überspringt die Zeile, Wiederholungen zu vermeiden und geht auf die nächste Zeile. Wie mache ich das?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt Kontrolle-Ausgabe-Datei für die Nummer, wenn es schon geschrieben wurde ist es besser, um diese Informationen in einer Variablen (ein
set
oderlist
). Es wird speichern Sie auf der Festplatte liest.Zur Suche einer Datei zahlen, die Sie benötigen, um eine Schleife durch jede Zeile der Datei, die Sie tun können, dass mit
for line in open('input'):
- Schleife, woinput
ist der name der Datei. Bei jeder iterationline
enthält eine Zeile der input-Datei endete mit dem Ende der Zeile-Zeichen '\n'.In jeder iteration sollten Sie versuchen, konvertieren Sie den Wert in dieser Zeile zu einer Zahl,
int()
Funktion verwendet werden kann. Sie können sich schützen gegen leere Zeilen oder nicht-Zahl-Werte mittry
- Anweisung.In jeder iteration mit der Nummer, die Sie sollten prüfen, ob der Wert, den Sie fand, war nicht schon geschrieben, um die Ausgabe-Datei, indem Sie eine
set
bereits geschrieben zahlen. Wenn der Wert nicht in das set noch, fügen Sie es und schreiben in die Ausgabedatei.Diesem Beispiel wird davon ausgegangen, dass Ihr
input
- Datei enthält einzelne zahlen in jeder Zeile. Im Fall der leeren auf die falsche Zeile wird eine Warnung angezeigtstdout
.Könnten Sie auch
list
im obigen Beispiel, aber es kann weniger effizient sein.Statt
numbers = set()
verwendennumbers = []
und stattnumbers.add(i)
:numbers.append(i)
. Die if-Bedingung gleich bleibt.Anstatt suchen Sie Ihre Ausgabe-Datei, halten eine Reihe von zahlen, die Sie geschrieben haben, und schreiben nur zahlen, die nicht in den Satz.
Nicht. Verwenden Sie eine
set()
zu halten Spur von alle zahlen, die Sie gesehen haben. Es wird nur eins von jedem.Hinweis: dieser liest Sie alle, dann schreibt Sie alle auf einmal heraus. Dies wird setzen Sie Sie in einer anderen Reihenfolge als in der ursprünglichen Datei (vorausgesetzt, Sie sind ganze zahlen, Sie werden kommen in aufsteigender numerischer Reihenfolge). Wenn Sie das nicht wollen, Sie können auch schreiben Sie, als Sie Sie Lesen, aber nur, wenn Sie nicht bereits in dem Satz:
Sind Sie mit der Arbeit mit besonders großen Dateien? Sie wahrscheinlich nicht wollen, um zu versuchen, Sie zu "suchen" die Datei, die Sie schreiben für einen Wert, den Sie gerade schrieb. Sie (wahrscheinlich) etwas mehr wollen wie diese:
Wenn Sie Scannen möchten, durch eine Datei, um zu sehen, wenn es mit einer Zahl auf jeder Linie, die Sie tun könnten, so etwas wie dieses:
Jedoch als Ned weist in seiner Antwort, dies ist nicht eine sehr effiziente Lösung; wenn Sie durchsuchen die Datei wieder für jede Zeile, die Laufzeit des Programms wird erhöht, der proportional zum Quadrat der Anzahl der zahlen.
Es die Anzahl der Werte ist nicht unglaublich groß, es effizienter wäre, die Verwendung von einem Satz (Dokumentation). Sets sind entwickelt, um sehr effizient zu verfolgen, ungeordnete Werte. Zum Beispiel: