【第19回Python基礎講座】比較のルール:リストやタプルの大小はどう決まる?

本ページはプロモーションが含まれています
【第19回Python基礎講座】比較のルール:リストやタプルの大小はどう決まる?
国内のAI狂い

やっほー!国内のAI狂いだよ!✨

第19回へようこそ!今回は、Pythonのちょっとマニアックだけど超重要なルール、「シーケンス(リストや文字列)の比較」について解説するよ。
[1, 2][1, 2, 3] ってどっちが大きいの?」
この謎が解ければ、データの並び替え(ソート)の動きも手に取るように分かるようになるよ!実はこれ、国語辞典と同じルールなんだ📕✨

公式の「ここがわかりにくい」:辞書的な順序?

公式ドキュメントには、比較のルールについてこう書かれているよ。

比較には 辞書的な (lexicographical) 順序 が用いられます。まず、最初の二つの要素を比較し、その値が等しくなければその時点で比較結果が決まります。等しければ次の二つの要素を比較し、以降シーケンスの要素が尽きるまで続けます。

「辞書的」っていうのは、まさに「国語辞典(または英和辞典)で単語を引くときの順番」のこと!
例えば「Apple」と「Apricot」を比べる時、どうする?
1文字目の A は同じ → 2文字目の p も同じ → 3文字目の pr を比べて、p の方が先(小さい)だから「Appleの方が前」って決めるよね。
Pythonのリスト比較も、これと全く同じことをしているんだ!

1. 基本ルール:先頭からガチンコ勝負!

要するにこれは「前から順番に比べて、勝負がついた瞬間に終了」するルールだよ!

リスト同士を <> で比較する時、Pythonはこんな風に考えているよ。

  1. 0番目の要素同士を比べる。
  2. もし違ったら、その大小関係がリスト全体の大小関係になる(勝負あり!)。
  3. もし同じなら、1番目の要素同士を比べる(延長戦)。
  4. これを、勝負がつくまで繰り返す。
🐍 実験コードを見る(クリックで開閉)
# 0番目で勝負がつくパターン
# 1 < 3 なので、後ろが何であろうと左が小さい!
print([1, 100, 100] < [3, 0, 0])
# -> True

# 0番目が同じで、1番目で勝負がつくパターン
# 'a' == 'a' なので次へ。'b' < 'c' なので左が小さい!
print(['a', 'b'] < ['a', 'c'])
# -> True

# タプルも同じルールだよ
print((1, 2, 3) < (1, 2, 4))
# -> True
💻 実行結果:
True
True
True

2. 長さが違う場合:尽きたら負け?

じゃあ、片方がもう片方の「一部分」だった場合はどうなるの?
例えば [1, 2][1, 2, 3] の比較。

【重要】 片方が尽きたら、短いほうが「小さい」と判定される!

辞書で言うと、「art」と「arts」なら、「art」の方が先に載ってる(小さい)のと同じだね。

🐍 サンプルコードを見る(クリックで開閉)
# 途中まで同じなら、短いほうが小さい
print([1, 2] < [1, 2, 3])
# -> True

# ただし、途中で大小が決まれば長さは関係ない!
# 2 < 3 なので、長さに関係なく左が小さい
print([1, 2] < [1, 3, 0, 0])
# -> True (長さは2 vs 4 だけど、1番目の要素で勝負あり)
💻 実行結果:
True
True

3. 文字の大小:Unicodeの番号順

要するにこれは「コンピュータ内の管理番号(コードポイント)で比べる」ということ!

文字列の比較も、1文字ずつの比較になるよ。
じゃあ、文字の大小って何?というと、Unicode(ユニコード)の番号の大小なんだ。

  • 数字 '0''9'
  • 大文字 'A''Z'
  • 小文字 'a''z'
  • 漢字など

大体この順番で番号が大きくなっていくよ。つまり…
大文字 ‘A’ よりも 小文字 ‘a’ の方が「大きい」 という点に注意!

🐍 文字比較の実験(クリックで開閉)
# アルファベット順
print('Python' < 'java')
# -> True ('P'の番号 < 'j'の番号 だから)
# ※普通は大文字の方が小さい番号だよ!

# 日本語も比較できる
print('あ' < 'い')
# -> True (あいうえお順)

# 1文字ずつ ord() 関数で番号を確認できるよ
print(f"P: {ord('P')}, j: {ord('j')}")
💻 実行結果:
True
True
P: 80, j: 106

試験に出る!要注意ポイント

今回の範囲で、Python 3 エンジニア認定基礎試験によく出るひっかけポイントをまとめたよ!📝

① 異なる型同士の比較

[1, 2] < (1, 2) のように、リストとタプルを比較したらどうなる?
Python 3では、「異なる型の順序比較」は TypeError になるよ!
(※ ==!= での等価比較はエラーにならず False になるけど、大小比較はエラー!)

② 比較できない要素が含まれる場合

リストの中に、比較できないもの(例:数値と文字列)が混ざっていて、運悪くそこの比較が必要になった場合もエラーになるよ。

[1, 'a'] < [1, 2]
# 0番目(1)は同じ。
# 1番目('a' と 2)を比べようとして TypeError 発生!
💡 管理人の失敗エピソード
「ファイル名のリストをソートしよう!」と思って files.sort() したら、['Image1.png', 'image2.png'] という順番になって「なんで!?」ってなったことあるよ😭
これは大文字 'I' が小文字 'i' より小さい(先に来る)からなんだね。
大文字小文字を無視してソートしたい時は key=str.lower を指定するテクニックが必要だよ!

理解度チェック!ミニクイズ

比較のルール、バッチリ理解できたかな?
試験レベルの問題でチェックしてみよう!🔍

次の比較式のうち、True になるものは?
  1. [1, 2, 3] < [1, 2]
  2. [1, 2, 3] == [1.0, 2.0, 3.0]
  3. (1, 2) < [1, 2]
▼ クリックで正解を表示
正解: 2. [1, 2, 3] == [1.0, 2.0, 3.0]

解説:
1は左の方が長いから False。
2は数値として等しいので True(1 と 1.0 は等しい)。
3はタプルとリスト(異なる型)の大小比較なので TypeError になるよ。

次の文字列比較の結果はどうなる?
'Python' < 'python'
  1. True
  2. False
  3. エラー
▼ クリックで正解を表示
正解: 1. True

解説:
先頭の文字 Pp を比較するよ。
大文字(ASCIIコードが小さい)の方が、小文字(ASCIIコードが大きい)よりも「小さい」と判定されるんだ。

次のリスト比較の結果は?
[1, 2, 100] < [1, 3, 0]
  1. True
  2. False
  3. エラー
▼ クリックで正解を表示
正解: 1. True

解説:
0番目(1 vs 1)は同じ。
1番目(2 vs 3)で、2 < 3 なので勝負あり。
2番目の要素(100 vs 0)は見もしないで判定終了だよ(短絡評価みたいなものだね)。

まとめ:次回への引き

今回は「シーケンスの比較ルール」について解説したよ!
「先頭から順番に」「大文字は小文字より小さい」この2点を抑えておけば、ソート問題も怖くないね✨

次回からは、いよいよ新しい章「モジュール」に突入するよ!
テーマは「プログラムを部品化!モジュールの作り方とimport」だよ。
長いプログラムを複数のファイルに分けて整理する方法や、人の作った便利な機能を借りてくる方法を学ぶよ。
Pythonの「バッテリー同梱(電池付属)」という哲学を体感しよう!お楽しみに!👋✨

出典: Python公式チュートリアル
Copyright © 2001-2026 Python Software Foundation. Licensed under the PSF License.

よかったらシェアしてね!
  • URLをコピーしました!
目次