やっほー!国内のAI狂いだよ!✨
第19回へようこそ!今回は、Pythonのちょっとマニアックだけど超重要なルール、「シーケンス(リストや文字列)の比較」について解説するよ。
「[1, 2] と [1, 2, 3] ってどっちが大きいの?」
この謎が解ければ、データの並び替え(ソート)の動きも手に取るように分かるようになるよ!実はこれ、国語辞典と同じルールなんだ📕✨
公式の「ここがわかりにくい」:辞書的な順序?
公式ドキュメントには、比較のルールについてこう書かれているよ。
比較には 辞書的な (lexicographical) 順序 が用いられます。まず、最初の二つの要素を比較し、その値が等しくなければその時点で比較結果が決まります。等しければ次の二つの要素を比較し、以降シーケンスの要素が尽きるまで続けます。
「辞書的」っていうのは、まさに「国語辞典(または英和辞典)で単語を引くときの順番」のこと!
例えば「Apple」と「Apricot」を比べる時、どうする?
1文字目の A は同じ → 2文字目の p も同じ → 3文字目の p と r を比べて、p の方が先(小さい)だから「Appleの方が前」って決めるよね。
Pythonのリスト比較も、これと全く同じことをしているんだ!
1. 基本ルール:先頭からガチンコ勝負!
リスト同士を < や > で比較する時、Pythonはこんな風に考えているよ。
- 0番目の要素同士を比べる。
- もし違ったら、その大小関係がリスト全体の大小関係になる(勝負あり!)。
- もし同じなら、1番目の要素同士を比べる(延長戦)。
- これを、勝負がつくまで繰り返す。
🐍 実験コードを見る(クリックで開閉)
# 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 になるものは?
▼ クリックで正解を表示
True になるものは?[1, 2, 3] == [1.0, 2.0, 3.0]
解説:
1は左の方が長いから False。
2は数値として等しいので True(1 と 1.0 は等しい)。
3はタプルとリスト(異なる型)の大小比較なので TypeError になるよ。
次の文字列比較の結果はどうなる?
'Python' < 'python'
▼ クリックで正解を表示
'Python' < 'python'解説:
先頭の文字 P と p を比較するよ。
大文字(ASCIIコードが小さい)の方が、小文字(ASCIIコードが大きい)よりも「小さい」と判定されるんだ。
次のリスト比較の結果は?
[1, 2, 100] < [1, 3, 0]
▼ クリックで正解を表示
[1, 2, 100] < [1, 3, 0]解説:
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.






