Pythonのシーケンス
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] は先頭から i+1 番目の要素を抽出します。
list, tuple, range, str に共通する演算機能です。
# PYTHON_SEQUENCE # In[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] は i+1 番目から j 番目までの要素をスライスします。 s[i:j:k] は k 毎のスライスです。list, tuple, range, str に備わる演算機能です。
# In[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 にサポートされる演算です。
# In[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 にサポートされています。
# In[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 にサポートされています。
# In[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 にはサポートされていません。
# In[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 に備えられたメソッドです。
# In[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 が出現する回数を返します。
# In[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 を自動的に開始する」のチェックマークを外しておきました。これで自動起動を解除できました。