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 のいずれも引数に受け取ることができます。詳細については個別の記事を参照してください。
【プログラミング日記】
PC を起ち上げると、OneDrive が自動起動していました。タスクマネージャで確認すると、OndeDrive が 8000 KB ほどのメモリを使用していることがわかって、ちょっとイライラしました。許可もなく勝手に人の大切なメモリを使わないでほしいです。タスクバーのところにある、OneDrive の アイコンをぽちっと右クリックして、[設定] を押し、「Windows にサインインしたときに OneDrive を自動的に開始する」のチェックマークを外しておきました。これで自動起動を解除できました。