AI資格ドリル
資格を選ぶ↓

用語比較

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冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

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) になりました。

02

区切りの有無を分岐なしで扱いたい人

partition() なら k, sep, v = line.partition('=') と書けます。区切りが無いときは sep が空文字列になるので、sep が空かどうかで有無を判断できます。

03

カンマ区切りの値を全部取り出したい人

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. 1

    分けたい個数を決める

    前と後の 2 つに分けるだけなら partition()、区切りの数だけ全部に分けたいなら split() です。

  2. 2

    区切りが無い入力があるかを考える

    あり得るなら、戻り値の要素数が変わる split() は展開で落ちます。要素数が常に 3 個の partition() は落ちません。

  3. 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() が連続した区切りで空文字列を残すと言える

同じ資格で次に知りたいこと

よくある質問

Q区切りが無いときに split() はエラーになりますか?

A

split() 自体はエラーになりません。元の文字列 1 個だけのリストを返します。エラーになるのは、2 個の変数で受け取ったときです。

Qpartition() の区切りは複数文字でもよいですか?

A

よいです。sep に渡した文字列全体を区切りとして、最初に見つかった位置で分けます。

Q最後の区切りで分けたいときはどうしますか?

A

rpartition() を使います。'a=b=c'.rpartition('=') は ('a=b', '=', 'c') です。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)