リスト と タプル は、どちらも整数値で インデックス(添字) を指定して、登録されている要素を参照できるオブジェクトでした。
次の例は、リストオブジェクト [10, 20, 30, 40, 55]
の、1番目と3番目の要素を参照して足し合わせています。
values = [10, 20, 30, 40, 55]
print(values[0] + values[2])
タプルオブジェクトでも、全く同じように要素を参照できます。
values = (10, 20, 30, 40, 50)
print(values[0] + values[2])
また、文字列オブジェクト も、インデックスを指定して文字列中の文字を参照できるオブジェクトです。リストやタプルと同じように、[]
にインデックスを指定し、その位置の文字を参照できます。
次の例は、文字列 "HELLO"
の、1番目と3番目の文字を参照しています。
values = "HELLO"
print(values[0] + values[2])
リスト・タプル・文字列はいずれも コレクション に属するオブジェクトですが、コレクションの一種で、整数値のインデックスを指定して要素を参照できるオブジェクトのことを、
シーケンス (Sequence)
と呼びます。
コレクションとシーケンスの違い¶
リストやタプルなどのオブジェクトは、コレクションの一種で、他のオブジェクトを登録し、集約できるオブジェクトです。
シーケンスとは、コレクションのうちで、集約する要素が一定の順序で並んでいて、その順序(インデックス)を使ってその要素を指定できる種類のオブジェクトのことを指します。
コレクションに属するオブジェクトでも、リストやタプルとは違って、辞書 は、順序を指定して要素を指定することはできません。このため、辞書はコレクションですが、シーケンスではありません。
Pythonには、辞書の他にもシーケンスに属さないオブジェクトがあり、この先もう少しだけPythonの学習をすすめると、そういった種類のオブジェクトについても学ぶことになります。
シーケンスの比較演算子¶
タプルやリスト、文字列などのシーケンスオブジェクトは、 <
、 <=
、>
、>=
などの演算子で、値の大小を判定できます。
list1 = ['a', 'b', 'c']
list2 = ['a', 'b', 'd']
print(list1 <= list2) # list1 < list2 なので True
list3 = ['a', 'b', 'c']
list4 = ['a', 'b', 'b']
print(list3 <= list4) # list3 > list4 なので False
シーケンスではない、辞書オブジェクトなどのコンテナオブジェクトは、 <
などによる大小の比較はできません。比較すると、次のようなエラーとなります。
dict1 = {"dog": "犬", "cat": "猫"}
dict2 = {"dog": "犬", "cat": "猫"}
print(dict1 <= dict2)
シーケンス同士の値の比較は、先頭の要素から順番に同じインデックス同士の値を比較して、先に小さい値となったシーケンスが小さい値となります。
例えば、上記のように (1, 2, 3)
と (1, 2, 4)
を比較した場合、
- 最初の要素の
1
と1
を比較する。同じ値なので、次の値をチェックする。 - 2番めの要素の
2
と2
を比較する。同じ値なので、次の値をチェックする。 - 3番目の要素の
3
と4
を比較する。3
<4
なので、(1, 2, 3)
は(1, 2, 4)
よりも小さい。
のように比較を行います。
比較するシーケンス同士の長さが異なる場合、短いシーケンスの要素と長いシーケンスの要素を比較してすべて等しければ、短い要素のほうが小さい値となります。
たとえば、長さが 3
のタプル (1, 2, 3)
と、長さが 4
のタプル (1, 2, 3, 4)
は、長さ 3
のタプルの要素はすべて長さ 4
のタプルと一致しますので、長さが短い (1, 2, 3)
が小さい値のタプルとなります。
value1 = (1, 2, 3)
value2 = (1, 2, 3, 4)
print(value1 < value2)