Warum entfernt str.split() Noney-Elemente, während str.split ('') nicht?Warum entfernt str.split() Noney-Elemente, während str.split ('') nicht?
>>> s = 'this is an irritating string with random spacing .'
>>> s.strip().split(' ')
['this', 'is', '', '', 'an', '', '', 'irritating', 'string', 'with', '', 'random', 'spacing', '', '.']
>>> s.strip().split()
['this', 'is', 'an', 'irritating', 'string', 'with', 'random', 'spacing', '.']
Nach dem docs:
str.split (sep = None, maxsplit = -1)
Wenn September angegeben wird, werden aufeinanderfolgende Trennzeichen nicht zusammen gruppiert und Es wird angenommen, dass leere Zeichenfolgen abgegrenzt werden (z. B. '1,, 2' .split (',') gibt ['1', '', '2']) zurück. Das Argument sep kann aus mehreren Zeichen bestehen (z. B. '1 <> 2 <> 3'.split (' <> ') gibt [' 1 ',' 2 ',' 3 '] zurück). Wenn Sie eine leere Zeichenfolge mit einem angegebenen Trennzeichen trennen, wird [''] zurückgegeben.
Wenn sep nicht angegeben ist oder None, wird ein anderer Aufteilungsalgorithmus 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 vorangestellt ist nachgestellte Leerzeichen. Wenn Sie also eine leere Zeichenfolge oder eine Zeichenfolge bestehend aus nur Leerzeichen mit einem Trennzeichen None aufteilen, wird [] zurückgegeben.
So zu verwenden, um das Schlüsselwort-Argument sep=
, das ist nach dem pythonic Weg, um die Noney Elemente entfernen?
[w for w in s.strip().split(' ') if w]
Wenn es nur Leerzeichen ist (\s\t\n
), str.split()
genügen lässt aber sagen, dass wir auf einem anderen Zeichen/String, die if-Bedingung in der Liste Verständnis zu spalten versuchen, ist notwendig. Ist das richtig?
Keines ist kein Leerzeichen. Ich weiß nicht einmal, was Noney bedeutet, aber die Methode funktioniert wie dokumentiert. Sie haben keine None-Elemente in einer Zeichenfolge –
Warum nicht einfach 'split()' verwenden? Außerdem, was versuchst du eigentlich zu tun? –
Randbemerkung: Wenn Sie no-arg 'split' verwenden, ist der erste Aufruf von' strip' redundant; Die 'split'-Operation entfernt bereits den führenden und nachfolgenden Whitespace, ohne einen zusätzlichen Methodenaufruf und ein temporäres' str' hinzuzufügen. – ShadowRanger