Schreibe ich eine kleine NLP-Algorithmus, und ich brauche, um Folgendes zu tun:
Für jeden string x in der Liste ["this", "this", "and", "that"]
, wenn der string x
und die nächste Zeichenfolge identisch sind, will ich drucken die Zeichenfolge.
InformationsquelleAutor avital | 2011-07-14
EDIT:
Nur als Randbemerkung, wenn Sie mit python 3.X verwenden Sie
range
stattxrange
InformationsquelleAutor GWW
Optimieren Sie, wenn nötig.
Ich bin mir auch nicht sicher, ob mehr lesbar/eleganter als eine einfache Schleife über alle Elemente ...
Völlig einig - für microoptimizations. Für Dinge wie diese, (Lesen: nicht-Konstante overhead), bin ich bereit mich zu denken, es up-front. Wenn OP, ist dies mit der dreißig-posten-Listen, ist es irrelevant. Aber wenn dies geschieht auf sehr langen Listen kann es werden, groß genug, um mit einer fast ebenso einfach und lesbar Ansatz, der verhindert, dass overhead.
Sollten Sie zur Iteration über eine riesige Liste (größer als der RAM), die Sie verwenden können
izip()
stattzip()
undislice(strings, 1, None)
stattstrings[1:]
alle vonitertools
.InformationsquelleAutor FogleBird
Manchmal, wie ich den stick mit den altmodischen Schleifen:
Jeder weiß, was Los ist, ohne viel zu denken, und es ist ziemlich effizient...
InformationsquelleAutor MartinStettner
Meisten Pythonic ist ein list comprehension, die ist genau dafür gebaut looping und gleichzeitig prüfen:
Oder, um zu vermeiden, temporäre Objekte (h/t @9000):
InformationsquelleAutor Andrew Jaffe
warum nicht einfach ? :
strings
da a und x beide als strings[0].InformationsquelleAutor eyquem
InformationsquelleAutor RichieHindle
Ist, dass Hausaufgaben?
Liste.index() wird eine ValueError-Ausnahme aus, wenn das Element nicht gefunden wird. Das ist, warum.
die einzige Möglichkeit, die passieren könnte, ist, wenn Sie ein Element löschen, der zwischen der Palette und dem Ausdruck ? :/
Wie die Dokumentation für die Liste.index() sagt: "die Rückkehr der index in der Liste das erste Element, dessen Wert x ist. Es ist ein Fehler, wenn es kein solches Element."
Oh ja, ich nicht sehen, der index().... Ok... ich bin raus.... sorry für nervig :/
InformationsquelleAutor BjoernD
Generell, wenn Sie die Verarbeitung über die Elemente in einer Liste und Sie müssen sich auf das aktuelle Element haben Nachbarn, Sie gehen zu wollen, zu verwenden
enumerate
, daenumerate
Ihnen sowohl das aktuelle Element und seine position in der Liste.Im Gegensatz zu den Ansätzen, die Nutzung
zip
diese Liste braucht keine Vervielfältigung der Liste:Beachten Sie, dass es scheitert, wenn es nicht mindestens zwei Elemente in
test
, und dasstest
müssen, ist eine Liste. (Diezip
Ansätze arbeiten auf jeden durchsuchbar.)InformationsquelleAutor Robert Rossney
Hier ein etwas anderer Ansatz, der verwendet eine spezielle Klasse zu erkennen, die wiederholt in einer Sequenz. Dann kann man tatsächlich finden, die wiederholt mit einer einfachen Liste zu erfassen.
InformationsquelleAutor kindall
Verwenden Sie das Rezept für
pairwise()
aus der stdlib itertools Dokumentation (ich zitiere ihn hier):Und Sie tun können:
Oder mit einem generator-Ausdruck geworfen:
InformationsquelleAutor Steven