Ich habe Python-Code, der durch Komma geteilt wird, aber das Leerzeichen nicht entfernt:
>>> string = "blah, lots , of , spaces, here "
>>> mylist = string.split(',')
>>> print mylist
['blah', ' lots ', ' of ', ' spaces', ' here ']
Ich würde lieber Leerzeichen wie folgt entfernen:
['blah', 'lots', 'of', 'spaces', 'here']
Ich bin mir bewusst, dass ich die Liste durchlaufen und jedes Element entfernen () kann, aber da dies Python ist, gibt es vermutlich eine schnellere, einfachere und elegantere Möglichkeit, dies zu tun.
python
whitespace
strip
Mr_Chimp
quelle
quelle
Mit einem regulären Ausdruck teilen. Hinweis: Ich habe den Fall mit führenden Leerzeichen allgemeiner gestaltet. Das Listenverständnis besteht darin, die Nullzeichenfolgen vorne und hinten zu entfernen.
Dies funktioniert auch dann, wenn
^\s+
es nicht übereinstimmt:Hier ist, warum Sie ^ \ s + benötigen:
Sehen Sie die führenden Räume in bla?
Erläuterung: Oben wird der Python 3-Interpreter verwendet, die Ergebnisse in Python 2 sind jedoch dieselben.
quelle
[x.strip() for x in my_string.split(',')]
ist pythonischer für die gestellte Frage. Vielleicht gibt es Fälle, in denen meine Lösung notwendig ist. Ich werde diesen Inhalt aktualisieren, wenn ich auf einen stoße.^\s+
notwendig? Ich habe Ihren Code ohne ihn getestet und er funktioniert nicht, aber ich weiß nicht warum.re.compile("^\s*,\s*$")
, ist das Ergebnis[' blah, lots , of , spaces, here ']
.^\s+
macht. Wie Sie selbst sehen können, werden^\s*,\s*$
auch die gewünschten Ergebnisse nicht zurückgegeben. Wenn Sie also mit einem regulären Ausdruck teilen möchten, verwenden Sie^\s+|\s*,\s*|\s+$
.Ich kam, um hinzuzufügen:
map(str.strip, string.split(','))
aber sah, dass es bereits von Jason Orendorff in einem Kommentar erwähnt worden war .
Als ich Glenn Maynards Kommentar in derselben Antwort las, in der Listenverständnisse über die Karte vorgeschlagen wurden, begann ich mich zu fragen, warum. Ich nahm an, dass er aus Performancegründen meinte, aber natürlich könnte er aus stilistischen Gründen gemeint sein oder etwas anderes (Glenn?).
Ein schneller (möglicherweise fehlerhafter?) Test auf meiner Box, bei dem die drei Methoden in einer Schleife angewendet wurden, ergab:
machen
map(str.strip, string.split(','))
den Sieger, obwohl es scheint , sie sind alle in derselben Liga.Natürlich sollte eine Karte (mit oder ohne Lambda) aus Leistungsgründen nicht unbedingt ausgeschlossen werden, und für mich ist sie mindestens so klar wie ein Listenverständnis.
Bearbeiten:
Python 2.6.5 unter Ubuntu 10.04
quelle
Entfernen Sie einfach den Leerraum aus der Zeichenfolge, bevor Sie ihn teilen.
quelle
"you just, broke this"
.Ich weiß, dass dies bereits beantwortet wurde, aber wenn Sie dies häufig beenden, sind reguläre Ausdrücke möglicherweise der bessere Weg:
Das
\s
entspricht jedem Leerzeichen, und wir ersetzen es einfach durch eine leere Zeichenfolge''
. Weitere Informationen finden Sie hier: http://docs.python.org/library/re.html#re.subquelle
Das funktioniert gut für mich.
quelle
re
(wie in regulären Ausdrücken) ermöglicht das Aufteilen auf mehrere Zeichen gleichzeitig:Dies funktioniert nicht gut für Ihre Beispielzeichenfolge, aber gut für eine durch Kommas getrennte Liste. Für Ihre Beispielzeichenfolge können Sie die re.split-Leistung kombinieren, um Regex-Muster zu teilen , um einen "Split-on-this-or-that" -Effekt zu erzielen.
Leider ist das hässlich, aber ein
filter
Wille macht den Trick:Voila!
quelle
re.split(' *, *', string)
?re.split('[, ]*',string)
für den gleichen Effekt.[, ]*
hinterlässt am Ende der Liste eine leere Zeichenfolge. Ich denke, Filter ist immer noch eine nette Sache, um sie dort hineinzuwerfen oder sich an das Listenverständnis zu halten, wie es die Top-Antwort tut.map(lambda s: s.strip(), mylist)
wäre ein bisschen besser als explizite Schleifen. Oder für das Ganze auf einmal:map(lambda s:s.strip(), string.split(','))
quelle
map
Sie jedes Mal , wenn Sie es verwenden , insbesondere wenn Sielambda
es verwenden, noch einmal, ob Sie ein Listenverständnis verwenden sollten.map(str.strip, s.split(','))
.quelle
Einfach Komma oder mindestens ein Leerzeichen mit / ohne vorhergehende / nachfolgende Leerzeichen.
Bitte versuche!
quelle
map(lambda s: s.strip(), mylist)
wäre ein bisschen besser als explizite Schleifen.Oder für das Ganze auf einmal:
Das ist im Grunde alles was Sie brauchen.
quelle