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

用語比較

random.choice()とsample()の違い|1個か重複なしの複数か(Python3基礎)

random.choice() は、リストなどのシーケンスから要素を1つだけ選んで返します。random.sample() は、重複なしで k 個を選び、リストで返します。1つ選ぶか、複数選ぶかが最初の分かれ目です。

Python3エンジニア認定基礎試験は、主教材「Pythonチュートリアル 第4版」の基礎文法部分から出題されます。公式チュートリアルの標準ライブラリの項(10.6)は、random モジュールの例として choice() と sample() を並べており、見分けが問われやすい組み合わせです。

このページは、くじ引きや抽選のようなプログラムで、どちらを使えばよいか迷う人向けです。乱数の値そのものは実行のたびに変わるため、ここでは戻り値の型と、起きる例外の違いに絞ります。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

random.choice(seq)

空でないシーケンスから要素を1つ返す。seq が空なら IndexError。

random.sample(population, k)

重複なしで k 個を選び、新しいリストで返す。元のリストは変わらない。k が母集団より大きいと ValueError。

見分け方

戻り値が要素そのものなら choice()、リストなら sample()。

違いを表で確認

比較軸random.choice(seq)random.sample(population, k)
選ぶ個数choice():常に1つsample():引数 k で個数を指定する
戻り値choice():選んだ要素そのもの(例:'apple')sample():k 個の要素を並べた新しいリスト(k が 1 でもリスト)
同じ要素の重複choice():1回の呼び出しでは1つなので重複の問題がないsample():選んだ要素を母集団に戻さないため、同じ位置の要素は2回選ばれない(重複なし)
元のリストへの影響choice():変えないsample():母集団自体は変更せず、新しいリストを返す
例外choice():シーケンスが空だと IndexErrorsample():k が母集団の大きさより大きいと ValueError

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

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

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

01

参加者の名簿から当選者を1人だけ決めたい人

選ぶのは1人なので random.choice(名簿) です。戻り値は名前そのもので、リストではありません。

02

名簿から3人を、同じ人が重ならないように選びたい人

random.sample(名簿, 3) です。非復元抽出なので、同じ位置の要素は重ならず、結果は3要素のリストになります。

03

choice() を3回呼べば sample(名簿, 3) と同じだと思っている人

choice() は呼び出しごとに独立して選ぶため、同じ人が2回出ることがあります。重複を避けたいなら sample() です。

具体例で使い分ける

例 1

戻り値の型を見分ける例(値は実行のたびに変わります)

fruits = ['apple', 'pear', 'banana'] とし、a = random.choice(fruits)、b = random.sample(fruits, 2) を実行します。

  • a は 'apple'・'pear'・'banana' のどれか1つで、型は文字列です。公式チュートリアルも、choice() に3つの果物のリストを渡す例を載せています。
  • b は ['pear', 'apple'] のような2要素のリストです。同じ要素が2回入ることはありません。
  • fruits 自体は変わりません。sample() は母集団を変更せず、新しいリストを返します。

結論: a は要素1つ、b は2要素のリストです。具体的な中身は毎回変わるので、設問では型と個数で答えます。

例 2

例外が起きる例:空のリストと、大きすぎる k

random.choice([]) と、random.sample([1, 2, 3], 5) を実行します。

  • choice() は空でないシーケンスを前提にしており、空のリストを渡すと IndexError が送出されます。
  • sample() は、サンプルの大きさが母集団の大きさより大きいと ValueError を送出します。ここでは母集団が3要素なのに5個を求めています。

結論: 1つ目は IndexError、2つ目は ValueError です。例外の名前が違う点も見分けの手がかりです。

問題文から答えを選ぶ手順

  1. 1

    何個選びたいかを確認する

    1つなら choice()、複数なら sample() を考えます。

  2. 2

    同じ要素が重なってよいかを考える

    重なってはいけない抽選なら sample() を使います。

  3. 3

    戻り値の使い方を確認する

    要素そのものがほしいなら choice()、リストで受け取るなら sample() です。

試験での見分け方

  • 1choice() は要素を1つ返し、sample() は要素のリストを返す。
  • 2sample() は重複なしの非復元抽出で、母集団を変更しない。
  • 3choice() の空シーケンスは IndexError、sample() の k が大きすぎる場合は ValueError。
  • 4選ばれる中身は実行のたびに変わるので、型・個数・例外で答える。

誤答しやすい選択肢

sample() の戻り値を、要素そのものだと思う

修正: sample() は k が 1 でもリストを返します。要素を取り出すなら添字が必要です。

sample() が元のリストを並べ替えたり、減らしたりすると思う

修正: 公式ドキュメントのとおり、母集団自体は変更せず、新しいリストを返します。

k が母集団より大きくても、重複を許して返してくれると思う

修正: サンプルの大きさが母集団の大きさより大きいと ValueError になります。重複を許して選ぶ関数は別にあります。

確認問題

Q1random.choice(['a', 'b', 'c']) の戻り値の型は、リストと文字列のどちらですか?

答え: 文字列

choice() は要素を1つ返すので、この例では 'a'・'b'・'c' のいずれか(文字列)です。

Q2random.sample(range(100), 10) が返す10個の値に、同じ値は含まれますか?

答え: 含まれない

sample() は重複なしの非復元抽出で、公式チュートリアルもこの例に「重複なしでサンプリング」と注記しています。

Q3random.sample([1, 2, 3], 5) を実行すると、どの例外が起きますか?

答え: ValueError

サンプルの大きさ 5 が母集団の大きさ 3 より大きいため、ValueError が送出されます。

到達チェック

  • choice() が要素を1つ返し、sample() がリストを返すと説明できる
  • sample() が重複なしで、母集団を変更しないと言える
  • choice([]) の IndexError と、sample() で k が大きすぎるときの ValueError を区別できる
  • 実行のたびに変わる値は、型と個数で答えると分かる

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

よくある質問

Qrandom.choice() は何を返しますか?

A

空でないシーケンスから選んだ要素を1つ返します。リストではなく要素そのものです。

Qrandom.sample() は元のリストを変更しますか?

A

変更しません。母集団はそのままで、選んだ要素の新しいリストを返します。

Qsample() で k を大きくしすぎるとどうなりますか?

A

サンプルの大きさが母集団の大きさより大きい場合、ValueError が送出されます。

次に見る比較

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