用語比較
split()と join() の違い|文字列を分ける・つなぐ(Python3基礎)
split() と join() は、文字列とリストを行き来させる組み合わせです。split() は文字列を区切ってリストにし、join() はリストを1つの文字列につなぎます。
書き方で迷いやすいのは、join() がリストのメソッドではなく、区切りに使う文字列のメソッドである点です。
このページは、["a", "b"].join(",") と書いてエラーになった人や、join() に数値のリストを渡して TypeError になった人向けです。決まりは、Python 公式ドキュメントの組み込み型(文字列メソッド)の項に書かれています。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
s.split(sep)
s を sep で区切った文字列のリストを返す。sep を省くと、連続する空白を1つの区切りとして扱う。
sep.join(iterable)
iterable の文字列を、sep をはさんでつないだ1つの文字列を返す。中に文字列でないものがあると TypeError。
共通
元の文字列は変わらない。
違いを表で確認
| 比較軸 | s.split(sep) | sep.join(iterable) |
|---|---|---|
| 戻り値の型 | "a,b,c".split(","):['a', 'b', 'c'](リスト) | ",".join(["a", "b", "c"]):'a,b,c'(文字列) |
| メソッドを持つ側 | 区切られる文字列 s のメソッド(s.split(",")) | 区切りの文字列 sep のメソッド(",".join(リスト)) |
| 数値を含むとき | 文字列を分けるだけなので、数値は関係しない | ",".join([1, 2]):TypeError(文字列でない値が含まれる) |
| 元のデータ | 元の文字列は変わらない | 元のリストは変わらない |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
["a", "b"].join(",") と書いてエラーになった人
公式ドキュメントでは、join は str のメソッドで、区切りの文字列に付けて呼ぶ形で書かれています。",".join(["a", "b"]) と書き、結果は 'a,b' です。
join() に数値のリストを渡して TypeError になった人
公式ドキュメントには、iterable に文字列でない値があると TypeError になると書かれています。Python 3.9.6 では ",".join([1, 2]) が TypeError でした。",".join(map(str, [1, 2])) なら '1,2' になりました。
split() の結果に空の要素が混ざった人
公式ドキュメントでは、sep を指定すると連続する区切りはまとめられず、間に空の文字列が入ると説明されています。Python 3.9.6 では "a b c".split(" ") が ['a', 'b', '', 'c'] で、split() なら ['a', 'b', 'c'] でした。
具体例で使い分ける
例 1
分けてからつなぎ直す
s = "a,b,c" を split(",") で分け、"-" でつなぎ直します。
- 公式ドキュメントは、split() を区切った文字列のリストを返すメソッドとして説明しています。
- join() は、iterable の文字列を連結した文字列を返し、要素の間には join を呼んだ文字列が入ると説明されています。
結論: "-".join(s.split(",")) は 'a-b-c' です。Python 3.9.6 で同じ結果を確認しました。
例 2
maxsplit で最初の1回だけ分ける
s = "a,b,c" に対して、s.split(",", 1) を実行します。
- 公式ドキュメントは、maxsplit を渡すとその回数までしか分けないと説明しています。
- 最初の区切りで1回だけ分かれ、残りは1つの文字列として残ります。
結論: 結果は ['a', 'b,c'] です。Python 3.9.6 で同じ結果を確認しました。
問題文から答えを選ぶ手順
- 1
変換の向きを決める
文字列からリストを作るなら split()、リストから文字列を作るなら join() です。
- 2
join() は区切りの側に書く
",".join(リスト) のように、区切りの文字列にメソッドを付けます。
- 3
要素が文字列か確かめる
数値が混ざるときは、map(str, ...) などで文字列にしてから join() に渡します。
試験での見分け方
- 1split() は文字列を区切ってリストにする。
- 2join() は文字列のリストを、区切りの文字列をはさんで1つの文字列にする。
- 3join() は区切りの文字列のメソッドで、リストのメソッドではない。
- 4join() に文字列でない要素があると TypeError。
誤答しやすい選択肢
リストに .join() を付ける
修正: 区切りの文字列に付けます。",".join(リスト) と書きます。
数値のリストをそのまま join() に渡す
修正: 文字列に直してから渡します。",".join(map(str, リスト)) と書きます。
split(" ") と split() を同じ動きだと思う
修正: sep を指定すると連続した区切りの間に空の文字列が入ります。sep を省くと連続する空白は1つの区切りです。
確認問題
Q1"a,b,c".split(",") は何を返しますか?
答え: ['a', 'b', 'c']
カンマで区切った文字列のリストを返します。
Q2"-".join(["x", "y", "z"]) は何を返しますか?
答え: 'x-y-z'
要素の間に "-" をはさんでつないだ文字列を返します。
Q3",".join([1, 2]) は何になりますか?
答え: TypeError
join() に渡す要素は文字列でなければなりません。
到達チェック
- split() が文字列のリストを返すと言える
- join() が1つの文字列を返すと言える
- join() は区切りの文字列のメソッドだと言える
- join() に文字列でない要素があると TypeError になると言える
関連ページで確認する
同じ資格で次に知りたいこと
- 辞書の pop() と popitem() の違い|キー指定か末尾か(Python3基礎)
辞書の pop() は指定したキーの値を取り出し、popitem() は最後に追加された(キー, 値)の組を取り出します。Python 公式ドキュメントの規定、Python 3.9.6 での実行結果、確認問題つきで整理します。
- list.append()と insert() の違い|要素を足す位置(Python3基礎)
リストの append() は末尾に1個足し、insert() は指定した位置に足します。Python 公式チュートリアルの規定、Python 3.9.6 での実行結果、確認問題つきで整理します。
- dict.get()と setdefault() の違い|辞書に書き込むかどうか(Python3基礎)
辞書の get() はキーが無いとき辞書を変えずに既定値を返し、setdefault() は既定値を辞書に挿入して返します。Python 公式ドキュメントの規定、Python 3.9.6 での実行結果、確認問題つきで整理します。
よくある質問
Q複数の区切り文字で分けられますか?
公式ドキュメントでは、複数の区切り文字で分けるには re.split() を使うと説明されています。split() の sep は複数文字でも、全体で1つの区切りとして扱われます。
Q空の文字列を split(",") するとどうなりますか?
Python 3.9.6 では [''] でした。sep を省いた "".split() は [] でした。
Qどちらが速いですか?
このページでは速度を比べていません。変換の向きで選びます。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
