Wenn ich in Vorheriger Beitrag eine durch Zeilenumbrüche begrenzte Textdatei las und eine Liste erstellte, enthielt jedes Element ein Zeilenvorschub-Symbol. Ich wollte es löschen.
Ich habe auf [diesen Blog-Artikel] verwiesen (http://python.civic-apps.com/map-reduce-filter/). Indem Sie eine Karte (Prozess, Listenobjekt) erstellen, können Sie den Prozess auf jedes Element anwenden. Ich bin dabei, die for-Anweisung zu drehen.
Eine verbesserte Version des Skripts im vorherigen Beitrag des Motivationslinks.
contain_or_not.py
import sys
r0 = open('vocab.txt','r') #Datei im Lesemodus öffnen
vocab = r0.readlines() #vocab.txt enthält Wörter, die durch Zeilenumbrüche getrennt sind
r0.close()
argvs = sys.argv
words = argvs[1:] #argvs[0]Enthält den Dateinamen zur Laufzeit
def remove(s):
return s.replace('\n','') #replace('Vor dem Austausch','Nach dem Austausch')Ersetzen Sie die entsprechende Zeichenfolge
new_vocab = list(map(remove, vocab)) #Entfernen Sie den Zeilenvorschub jedes Vokalelements mit der Kartenfunktion
for word in words:
if word in new_vocab:
print(word + ' is in vocab at line %d.' %(new_vocab.index(word)+1))
else:
print(word + ' is not in vocab.')
Übrigens gebe ich auch die Zeile aus, in der sich das zu überprüfende Wort in der Liste befindet.
Wenn ich die Kartenfunktion ohne nachzudenken verwendet habe, wurde new_vocab zu einem Kartenobjekt, daher habe ich die Listenfunktion verwendet, um sie erneut aufzulisten. Das Kartenobjekt scheint als Iterator bezeichnet zu werden. Ist es ein Objekt, das die Funktion hat, für jedes Element der Liste dieselbe Verarbeitung durchzuführen, anstatt eine for-Anweisung zu schreiben? Ich bin immer noch nicht sehr vertraut damit.
Recommended Posts