質問: ["hello", "world"] print "-".join(my_list) # produce: "hello-world" このような特別な理由はありますか?
回答: これはpython-devの stringメソッド...やっと threadで議論され、guidoに受け入れられました。このスレッドは1999年6月に始まり、str.joinは2000年9月にリリースされた(そしてunicodeをサポートした)python 1.6に含まれました。 python 2.0(strを含むjoinメソッドをサポート)は2000年10月にリリースされました。 このスレッドで提案されている4つのオプションがありました: str.join(seq) seq.join(str) seq.reduce(str) 組み込み関数としてのjoin guidoはlists、tuplesだけでなく、すべてのシーケンス/イテラブルをサポートしたいと考えていました。 seq.reduce(str)は初心者にとって難しいです。 seq.join(str)はシーケンスからstr/unicodeへの予期しない依存性をもたらします。 組み込み関数としてのjoin()は特定のデータ型のみをサポートします。そのため、組み込みの名前空間を使用するのは良くありません。 join()が多くのデータ型をサポートしている場合、最適化された実装を作成するのは難しいでしょう。もし__add__メソッドを使って実装されているならo(n2)です。 区切り文字列(sep)は省略しないでください。明示的は暗黙的より優れています。 このスレッドに他の理由はありません。 ここにいくつかの追加の考えがあります(私自身、そして私の友人のもの)。 unicodeのサポートは来ましたが、それは最終的なものではありませんでした。当時はutf-8が最もucs2/4に代わるものでした。 utf-8文字列の合計バッファ長を計算するには、文字コード規則を知る必要があります。 当時、pythonは、ユーザーがシーケンスのような(反復可能な)クラスを作成できる共通のシーケンスインターフェース規則を既に決めていました。しかし、pythonは2.2まで組み込み型の拡張をサポートしていませんでした。当時、基本的な反復可能クラスを提供するのは困難でした(これについては別のコメントで説明しています)。 guidoの決定は 履歴メール に記録され、str.join(seq)を決定します。 おかしいです、しかしそれは正しいようです!バリー、それに行きなさい... - グイド・ヴァン・ロッサム