Python bite: 文字列の split
Tagged:

Python の文字列オブジェクトは、 区切り記号で分割した要素配列を返却する split() メソッドを提供しています。

> 'a,b,c'.split(',')
['a', 'b', 'c']
文字列の分割

メソッドのドキュメンテーションによると、 「If sep is not specified or is None, any whitespace string is a separator」とあるので、 'a□□b□□c'.split()'a□□b□□c'.split('□') (可読性上、半角空白文字を"□"で表現)は同一の挙動になるような気がするのですが、 そう思っていると咬まれます

> 'a□□b□□c'.split()
['a', 'b', 'c']
> 'a□□b□□c'.split('□')
['a', '', 'b', '', 'c']
区切り記号指定の有無による違い

文字列メソッドのオンラインドキュメントには、 区切り記号指定の有無で挙動が変わる旨が明記されています。 この記述を踏まえて、 あらためてメソッドドキュメンテーションを読み直すと、 「If sep is not specified or is None, any whitespace string is a separator」 における赤字部分が「任意長の空白文字の連続からなる文字列」 の意味であることが理解できます。うーん、紛らわしい。

もっとも、 区切り記号 ",""a,,b,,c" を分割した際に [ "a", "b", "c" ] とみなしてしまう java.util.StringTokenizer に比べれば、 随分マシな気もしますが。