用語比較
split()とpartition()の違い|区切りが無いときの戻り値(Python3基礎)
'key=value' を '=' で二つに分けたいとき、split() と partition() のどちらでも書けます。違いが出るのは、区切りが文字列の中に無かったときです。
split('=', 1) は要素が 1 個のリスト ['key'] を返すので、k, v = で受け取ると ValueError になります。partition('=') は常に 3 要素のタプルを返すので、同じ受け取りが成立します。
このページは、設定行や 'name=value' 形式の文字列を分解していて、区切りの無い行で落ちた人向けです。両者の決まりは、Python 公式ドキュメントの組み込み型(文字列のメソッド)の項に書かれています。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
split(sep, maxsplit)
区切りで分けた文字列のリストを返す。要素数は区切りの数で変わる。maxsplit を指定すると、分割は最大でその回数まで。
partition(sep)
最初に見つかった区切りで分け、区切りの前・区切りそのもの・区切りの後の 3 要素のタプルを返す。見つからなければ、元の文字列と空文字列 2 つのタプルを返す。
末尾側
rsplit() と rpartition() が、最後の区切りで分ける対応する組になっている。
違いを表で確認
| 比較軸 | split(sep, maxsplit) | partition(sep) |
|---|---|---|
| 戻り値の型 | split:リスト | partition:3 要素のタプル |
| 'key'(= が無い)の結果 | 'key'.split('=', 1):['key'](要素 1 個) | 'key'.partition('='):('key', '', '')(要素 3 個) |
| 'a=b=c' の結果 | 'a=b=c'.split('=', 1):['a', 'b=c'] | 'a=b=c'.partition('='):('a', '=', 'b=c') |
| 区切りそのもの | split:結果に含まれない | partition:2 番目の要素として含まれる |
| 区切りに使える形 | sep を省略すると空白の並びで分ける | sep の指定が必須 |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
k, v = line.split('=', 1) が区切りの無い行で落ちた人
'key'.split('=', 1) は ['key'] を返し、要素が 1 個なので k, v に展開できません。Python 3.9.6 では ValueError: not enough values to unpack (expected 2, got 1) になりました。
区切りの有無を分岐なしで扱いたい人
partition() なら k, sep, v = line.partition('=') と書けます。区切りが無いときは sep が空文字列になるので、sep が空かどうかで有無を判断できます。
カンマ区切りの値を全部取り出したい人
split(',') を使います。partition() は最初の区切りで 1 回しか分けないので、3 個以上に分けたいときには向きません。
具体例で使い分ける
例 1
区切りが無い文字列を渡したときの結果(公式ドキュメントの例を含む)
'Monty Python'.partition('-') と 'key'.split('=', 1) を実行します。
- 公式ドキュメントは、partition() で区切りが見つからないとき、文字列そのものに続けて空文字列 2 つの 3 要素タプルを返すと定めています。'Monty Python'.partition('-') は ('Monty Python', '', '') です。
- split() は区切りが無ければ分割が起きず、元の文字列 1 個だけのリストになります。
結論: 答えは ('Monty Python', '', '') と ['key'] です。Python 3.9.6 で同じ結果を確認しました。
例 2
split() の空文字列と連続した区切りの扱い(公式ドキュメントの例)
'1,,2'.split(',')、''.split(',')、''.split() を実行します。
- sep を指定すると、連続した区切りは一つにまとめられず、間に空文字列があるものとして扱われます。'1,,2'.split(',') は ['1', '', '2'] です。
- sep を指定して空文字列を分けると [''] が返ります。sep を省略した場合は、空文字列でも空白だけの文字列でも [] が返ります。
結論: 答えは ['1', '', '2']、['']、[] の順です。公式ドキュメントも同じ結果を示しています。
問題文から答えを選ぶ手順
- 1
分けたい個数を決める
前と後の 2 つに分けるだけなら partition()、区切りの数だけ全部に分けたいなら split() です。
- 2
区切りが無い入力があるかを考える
あり得るなら、戻り値の要素数が変わる split() は展開で落ちます。要素数が常に 3 個の partition() は落ちません。
- 3
区切りそのものが必要かを考える
partition() は区切りを結果に含めます。不要なら _ で受け取って捨てます。
試験での見分け方
- 1partition() は常に 3 要素のタプルを返す。
- 2split() の要素数は、区切りの数と有無で変わる。
- 3partition() の区切りが見つからないときは、(元の文字列, '', '') になる。
- 4split(sep) は連続した区切りの間を空文字列として残す。
誤答しやすい選択肢
split('=', 1) の結果は必ず 2 要素だと思う
修正: 区切りが無ければ要素は 1 個です。'key'.split('=', 1) は ['key'] で、k, v = で受けると ValueError になります。
partition() の戻り値をリストだと思う
修正: 戻り値はタプルです。('a', '=', 'b=c') のように、区切りも含めた 3 要素が並びます。
partition() が 3 個以上に分けると思う
修正: 最初に見つかった区切りで 1 回分けるだけです。'a=b=c'.partition('=') は ('a', '=', 'b=c') で、後ろの '=' は分けられません。
確認問題
Q1'Monty Python'.partition('-') の結果は何ですか?
答え: ('Monty Python', '', '')
区切りが見つからないので、元の文字列と空文字列 2 つの 3 要素タプルが返ります。
Q2'key'.split('=', 1) の結果は何ですか?
答え: ['key']
区切りが無いので分割は起きず、元の文字列 1 個だけのリストになります。k, v = で受けると ValueError になります。
Q3'1,,2'.split(',') の結果は何ですか?
答え: ['1', '', '2']
sep を指定したときは連続した区切りがまとめられず、間の空文字列が残ります。
到達チェック
- partition() が常に 3 要素のタプルを返すと言える
- 区切りが無いときの split() と partition() の結果を書き分けられる
- k, v = で split() が ValueError になる理由を言える
- sep を指定した split() が連続した区切りで空文字列を残すと言える
関連ページで確認する
同じ資格で次に知りたいこと
- dict.get()と d[key] の違い|キーが無いときの KeyError と None(Python3基礎)
d['b'] はキーが無いと KeyError、d.get('b') は None を返し、d.get('b', 0) なら 0 を返します。値が None のキーとキーが無いことの区別も含め、Python 公式ドキュメントの規定、Python 3.9.6 での実行結果、確認問題つきで整理します。
- set.remove()と discard() の違い|要素が無いときの KeyError(Python3基礎)
s.remove(x) は x が集合に無いと KeyError、s.discard(x) は何も起こしません。どちらも戻り値は None です。Python 公式ドキュメントの規定、Python 3.9.6 での実行結果、確認問題つきで整理します。
- round()と四捨五入の違い|0.5が0になる偶数への丸めとは(Python3基礎)
Python の round() は、二つの倍数が同じだけ近いとき偶数の方へ丸めます。round(0.5) は 0、round(1.5) は 2 です。Python 公式ドキュメントの記述と例、round(2.675, 2) が 2.67 になる理由、確認問題つきで学校で習う四捨五入との違いを整理します。
よくある質問
Q区切りが無いときに split() はエラーになりますか?
split() 自体はエラーになりません。元の文字列 1 個だけのリストを返します。エラーになるのは、2 個の変数で受け取ったときです。
Qpartition() の区切りは複数文字でもよいですか?
よいです。sep に渡した文字列全体を区切りとして、最初に見つかった位置で分けます。
Q最後の区切りで分けたいときはどうしますか?
rpartition() を使います。'a=b=c'.rpartition('=') は ('a=b', '=', 'c') です。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
