2015-05-16 8 views
6

Ich versuchte ein einfaches Beispiel mit String Split, aber etwas unerwartetes Verhalten zu bekommen. Hier ist der Beispielcode:Python - String Split mit Standard Delimiter vs benutzerdefinierte Trennzeichen

def split_string(source,splitlist): 
    for delim in splitlist: 
     source = source.replace(delim, ' ') 
    return source.split(' ') 

out = split_string("This is a test-of the,string separation-code!", " ,!-") 
print out 
>>> ['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code', ''] 

Wie Sie sehen können, habe ich eine zusätzliche leere Zeichenkette am Ende der Liste, wenn ich Raum als Trennzeichen Argument für split() Funktion. Wenn ich jedoch kein Argument für die Funktion split() übergebe, habe ich am Ende der Ausgabeliste keine leere Zeichenfolge.

Von was ich in Python-Dokumente gelesen habe, sagten sie, dass das Standardargument für split() Leerzeichen ist. Also, warum, wenn ich ein '' als Trennzeichen explizit übergebe, erzeugt es eine leere Zeichenkette am Ende der Ausgabeliste?

Antwort

12

Die docs:

Wenn sep nicht angegeben ist oder None ist, wird ein anderer Splittungsalgorithmus angewendet: Läufe von aufeinander folgenden Leerzeichen werden als einzelnes Trennzeichen betrachtet, und das Ergebnis enthält keine leeren Zeichenfolgen am Anfang oder Ende, wenn die Zeichenfolge führende oder nachfolgende Leerzeichen enthält.

+0

wow, das ist der Punkt! – Bent

-2

Das kann passieren, wenn Sie mehrere Leerzeichen zwischen zwei Wörtern haben. Zum Beispiel würde

'a b'.split(' ') will return ['a', '', '', '', 'b'] 

Aber ich schlage vor, Sie von der Wieder Modul Split zu verwenden. Überprüfen Sie das folgende Beispiel:

import re 
print re.split('[\s,; !]+', 'a b !!!!!!! ,  hello ;;;;; world') 

Wenn wir das obige Stück laufen, es gibt [ 'a', 'b', 'hallo', 'Welt']

Verwandte Themen