2011-12-16 21 views
3

ちょうどsplitメソッドは、最初の文字が区切り文字であれば結果リストに空の文字列を生成することに気付きました。Python:分割時の最初の文字

例:

['foo', 'bar', 'blarg'] 

が、これは望ましい動作である理由をいくつかの理由がある、またはこれは単にバグです:私はこれが生じることが予想

>>> s = '/foo/bar/blarg' 
>>> s.split('/') 
['', 'foo', 'bar', 'blarg'] 

+2

この動作に問題はありません。空白はまだ文字列です。 – yosukesabai

+1

["/1/2/3/".split("/")](http://stackoverflow.com/questions/3142428/1-2-3-split)の可能な複製 –

答えて

5

"/foo".split("/")"foo".split("/')を区別することができないため、これが望ましい動作です。

私は、私はそれらを削除するfilter(None, foo.split("/"))を使用します、スプリットを使用して、私はおそらく空の文字列を望んでいないことを知っている:

>>> filter(None, "/foo//bar".split("/")) 
['foo', 'bar'] 
2

コントラストこれらの例を:

>>> s = '/foo/bar/blarg' 
>>> s.split('/') 
['', 'foo', 'bar', 'blarg'] 

対を

>>> s = 'foo/bar/blarg' 
>>> s.split('/') 
['foo', 'bar', 'blarg'] 

あなたのリストに特別な''があると、あなたは最初に/があったかあなたの文字列があるかどうか

4

Davidの答えに追加するには... splitは文字列のセクションを指定された区切り文字で区切ります。空の文字列は、有効なセクションが、そうでない場合は、このような分割例も問題となると考えている必要があります。

'//'.split('/') 

他に何べき['', '', '']以外のこの戻り、?他の回答に加えて

1

、あなたのリストの最初と最後に空の文字列を防止するための一つの方法は、/文字を先頭と末尾の剥ぎすることです:あなたはまだ空になるだろう

>>> s = '/foo/bar/blarg' 
>>> s.strip('/').split('/') 
['foo', 'bar', 'blarg'] 

注意文字列の途中に連続する文字が/の場合は文字列。