用語比較
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():シーケンスが空だと IndexError | sample():k が母集団の大きさより大きいと ValueError |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
参加者の名簿から当選者を1人だけ決めたい人
選ぶのは1人なので random.choice(名簿) です。戻り値は名前そのもので、リストではありません。
名簿から3人を、同じ人が重ならないように選びたい人
random.sample(名簿, 3) です。非復元抽出なので、同じ位置の要素は重ならず、結果は3要素のリストになります。
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つなら choice()、複数なら sample() を考えます。
- 2
同じ要素が重なってよいかを考える
重なってはいけない抽選なら sample() を使います。
- 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 を区別できる
- 実行のたびに変わる値は、型と個数で答えると分かる
関連ページで確認する
同じ資格で次に知りたいこと
- input()の戻り値(文字列)とint()で変換した整数の違い|足し算が連結になる理由(Python3エンジニア認定基礎試験)
input()が返す値は数字を入力しても文字列で、そのまま + を使うと足し算ではなく連結になります。int()で整数にする手順と、数字以外を入力したときのValueErrorの扱いを、公式ドキュメントの記述と計算例、確認問題つきで整理します。
- re.sub()とstr.replace()の違い|決まった文字列かパターンか(Python3基礎)
str.replace() は決まった文字列を別の文字列に置き換え、re.sub() は正規表現のパターンに合う部分を置き換えます。公式チュートリアルの『最小限の機能だけなら文字列メソッドがお勧め』という記述と計算例、確認問題つきで使い分けを整理します。
- 仮引数と実引数の違い|def fib(n) の n と fib(2000) の 2000 で見分ける(Python3基礎)
仮引数と実引数の違いを、Python公式チュートリアル4章の記述とPython 3.9.6の実行結果で整理。def の後ろに書く名前と、呼び出すときに渡す値の区別、引数の数が合わないときのTypeErrorを、確認問題つきで確認します。
よくある質問
Qrandom.choice() は何を返しますか?
空でないシーケンスから選んだ要素を1つ返します。リストではなく要素そのものです。
Qrandom.sample() は元のリストを変更しますか?
変更しません。母集団はそのままで、選んだ要素の新しいリストを返します。
Qsample() で k を大きくしすぎるとどうなりますか?
サンプルの大きさが母集団の大きさより大きい場合、ValueError が送出されます。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
