Gibt es eine Möglichkeit, um split einen string, indem jeder N-te separator in Python?
Zum Beispiel, wenn ich den folgenden string:
"dies-ist-ein-string"
Könnte ich es teilen, durch die jeder 2." -", anstatt alle "-" also, es gibt zwei Werte ("dies-is" und "a-string") anstelle der Rückgabe von vier?
InformationsquelleAutor Gnuffo1 | 2009-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine andere Lösung:
Warum nach unten Stimmen? Was ist falsch an dieser Antwort?
Dies scheint die einfachste, für die Arbeit, für eine variable Länge zwischen den Trennungen.
InformationsquelleAutor Gumbo
Manchmal itertools.izip ist schneller, wie Sie können sehen in den Ergebnissen
Hier ist eine version, die Art arbeitet mit einer ungeraden Anzahl von teilen je nachdem, welche Ausgabe Sie wünschen. Sie könnten es vorziehen, schneiden Sie die
'-'
aus dem Ende des letzten Elements mit.rstrip('-')
zum Beispiel.Hier sind einige timings
Wow, das ist großartig!
pythonic Eleganz
Bist du mit dem falschen code für meinen Vorschlag. Ich bewege mich auf die Worte ein, die nicht die Zeichenfolge.
python -m timeit -s 's="a-b-c-d-e-f-g-h-i-j-k-l".split("-")' '["-".join(s[i:i+2]) for i in range(0, len(s), 2)]'
Schön gemacht, aber nicht für eine ungerade Anzahl von Elementen. Es sollte nicht allzu schwer zu überwinden, obwohl.
InformationsquelleAutor John La Rooy
Reguläre Ausdrücke dies leicht zu handhaben:
Ausgabe:
Update für Nick D:
Ausgabe:
gute Antwort aber es ist nur für jeden 2. separator.
... und nur für eine gerade Anzahl von Wörtern.
Nick: Nicht so. Siehe mein update. Gumbo: Auch nicht so. Nur eine einfache änderung der regex wird, behandeln diesen Fall als gut, wenn es gewünscht ist.
ok, aber ich sehe nicht, das
d-ddddd
in den Ausgang 😉InformationsquelleAutor recursive
sorry, habe ich falsch verstanden, deine Frage ersten mal und schrieb es, n war ein überbleibsel aus früheren. Nun es gibt eine Liste von strings.
Das ist sehr kompliziert (zu lange zu Lesen/entziffern), im Vergleich zu vielen anderen Lösungen, die hier vorgeschlagen wird...
Müll. es ist eigentlich viel einfacher zu entschlüsseln. Länge weitgehend irrelevant ist und es könnte verkürzt werden, so dass es weniger lesbar. Es sollte eine gute performance, da die Schleife hat nur eine einfache Bedingung zu behandeln. Auch hat er die größte Flexibilität für einen Umgang mit der Verarbeitung innerhalb der Schleife. Auch die Gewinner Antwort Absturz auf einen string mit einer ungeraden Anzahl von Bindestrichen. Iter und die Liste ops könnte pythonic aber das bedeutet nicht unbedingt, dass Sie 'besser'.
InformationsquelleAutor SpliFF
EDIT: Der ursprüngliche code, den ich gepostet hat nicht funktioniert. Diese version ist:
Ich glaube nicht, können Sie aufgeteilt auf alle anderen, aber Sie könnten aufgeteilt auf alle - und kommen jedes paar.
["-", "-", "-", "-"]
Funktioniert dies nicht. Die Ausgabe besteht aus einer Liste von 1 Zeichen-strings mit einem Bindestrich.
Seine Idee ist gut, Sie schreiben, könnte die Umsetzung Ihrer eigenen.
Ja. Splice hat nicht funktioniert, wie ich dachte, es Tat, ich habe behoben, das implementatino.
Downvote entfernt. Sie könnten genauso gut tun split_string[i:i+2] anstatt eine Liste wörtlich, da Sie wissen, die Größe schon.
InformationsquelleAutor EmFi
Ich denke, dass einige der bereits gegebenen Lösungen sind gut genug, aber nur zum Spaß, habe ich diese version:
InformationsquelleAutor elzapp