シーケンス

シーケンス

Pythonのシーケンス

 シーケンス (sequence) とは「要素と、要素の並ぶ順序が記憶されているデータ型」のことです。たとえば、リストはシーケンスなので、 [1, 2] と [2, 1] は異なるデータです。

[1, 2] == [2, 1]
False

 セットはシーケンスではないので、{1, 2} と {2, 1} は同じデータであると判断されます。

{1, 2} == {2, 1}
True

 list, tuple, range は Python の基本的なシーケンスです。
 str, bytes, bytearray は特殊なシーケンスに分類されます。
 この記事では、list, tuple, range およびテキストシーケンス str を扱います。

 シーケンス に分類されるオブジェクトは、いくつかの共通する演算機能、関数、メソッドを備えています。以下、s, t は互いに同じ型のシーケンス、x は任意のオブジェクト、n, i, j は整数とします。

s[i]

 s[i] は先頭から i+1 番目の要素を抽出します。
 list, tuple, range, str に共通する演算機能です。

# PYTHON_SEQUENCE-1

# シーケンスを生成
my_list = [1, 2, 3, 4, 5]
my_tuple = (1, 2, 3, 4, 5)
my_range = range(1, 6)
my_str = "12345"

# s[1]は2番目の要素を抜き出す
print(my_list[1])
print(my_tuple[1])
print(my_range[1])
print(my_str[1])
2
2
2
2

 

s[i:j], s[i:j:k]

 s[i:j] は i+1 番目から j 番目までの要素をスライスします。 s[i:j:k] は k 毎のスライスです。list, tuple, range, str に備わる演算機能です。

# PYTHON_SEQUENCE-2

# s[1:4]は2番目から4番目の要素を抜き出す
print(my_list[1:4])
print(my_tuple[1:4])
print(my_range[1:4])
print(my_str[1:4])
[2, 3, 4]
(2, 3, 4)
range(2, 5)
234

 

x in s

 x in s はシーケンス s にオブジェクト x が含まれていれば True, 含まれていなければ False を返します。list, tuple, range, str にサポートされる演算です。

# PYTHON_SEQUENCE-3

print("my_list に 3 は含まれる? {}".format(3 in my_list))
print("my_tuple に 3 は含まれる? {}".format(3 in my_tuple))
print("my_range に 6 は含まれる? {}" .format(6 in my_range))
print("my_str に 6 は含まれる? {}".format("6" in my_str))
my_list に 3 は含まれる? True
my_tuple に 3 は含まれる? True
my_range に 6 は含まれる? False
my_str に 6 は含まれる? False

 

x not in s

 x not in s はシーケンス s にオブジェクト x が含まれていなければ True, 含まれていれば False を返します。すなわち、x in s を反転させたブール値が返ります。list, tuple, range, str にサポートされています。

# PYTHON_SEQUENCE-4

print("my_list に 3 は含まれない? {}".format(3 not in my_list))
print("my_tuple に 3 は含まれない? {}".format(3 not in my_tuple))
print("my_range に 6 は含まれない? {}" .format(6 not in my_range))
print("my_str に 6 は含まれない? {}".format("6" not in my_str))
my_list に 3 は含まれない? False
my_tuple に 3 は含まれない? False
my_range に 6 は含まれない? True
my_str に 6 は含まれない? True

 

s+t

 連結演算 s + t は list, tuple, str にサポートされています。

# PYTHON_SEQUENCE-5

print(my_list + my_list)
print(my_tuple + my_tuple)
print(my_str + my_str)
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
(1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
1234512345

 

s*n, n*s

 シーケンス s と整数 n の積 s*n (あるいは n*s) は s を n 個連結することを意味します。list, tuple, str で使用できますが、range にはサポートされていません。

# PYTHON_SEQUENCE-6

print(3 * my_list)
print(3 * my_tuple)
print(3 * my_str)
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
(1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
123451234512345

 

s.index()

 s.index(x) はシーケンス s の中で要素 x が最初に出現するインデックスを返します。x が存在しない場合は ValueError を送出します。list, tuple, range, str に備えられたメソッドです。

# PYTHON_SEQUENCE-7

# シーケンスに含まれる4のインデックスを取得
print(my_list.index(4))
print(my_tuple.index(4))
print(my_range.index(4))
print(my_str.index("4"))
3
3
3
3

 

s.count()

 s.count(x) はシーケンス s の中にオブジェクト x が出現する回数を返します。

# PYTHON_SEQUENCE-8

# シーケンスを生成
my_list_2 = ["a", "b", "b", "b", "c", "c"]
my_tuple_2 = ("a", "b", "b", "b", "c", "c")
my_str_2 = "abbbcc"

# シーケンスの中に含まれる"b"をカウント
print(my_list_2.count("b"))
print(my_tuple_2.count("b"))
print(my_str_2.count("b"))
3
3
3

 この他に、組み込み関数 max(), min(), len() は list, tuple, range, str のいずれも引数に受け取ることができます。詳細については個別の記事を参照してください。