Python

【Python】シーケンス型とは?【シーケンス型の使い方】

この記事では、Pythonのシーケンス(sequence)型について解説します。シーケンス型とは文字列やリストのような複数の要素をまとめて扱える型のことをいいます。特有の演算も定義されているので確認していきましょう!

シーケンス型について

まずは、シーケンス型の基本について見ていきます。

シーケンス型とは

シーケンス型とは、順番を持った複数のデータを扱う型のことを言います。他のプログラミング言語では「配列」と呼ばれたりもします。

並びを保持しないdictなどはシーケンス型ではないので注意してください

シーケンス型一覧

Pythonでは以下のようなシーケンス型が用意されています。

  • リスト(list)
  • タプル(tuple)
  • レンジ(range)
  • 文字列(str)

インデックス(添字)

シーケンス型の要素には、インデックス(添字)と呼ばれる番号が割り振られます。
例えば、下のようなリストでは、

l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

以下のようにインデックスが割り振られます。

インデックスは、先頭の要素から0, 1, 2…と順番に割り振られます。また、マイナスの値も割り振られ、末尾の要素から-1, -2, -3…と順番に割り振られます。

ミュータブルとイミュータブル

シーケンス型には、ミュータブルなものとイミュータブルなものがあります。

ミュータブルなシーケンス型

ミュータブルとは、変更可能なオブジェクトのことを言います。同じオブジェクトのまま、値だけを変更することができます。

ミュータブルなシーケンス型には「list(リスト)」型があります。

イミュータブルなシーケンス型

イミュータブルとは、変更不可能なオブジェクトのことを言います。同じオブジェクトのまま値だけを変更することができません。変更するには新しいオブジェクトを作成する必要があります。

イミュータブルなシーケンス型には以下のようなものがあります。

  • タプル(tuple)
  • レンジ(range)
  • セット(set)

シーケンス型でできること

シーケンス型では、以下のようなことができます。

インデックスで要素にアクセス

インデックスを使って要素にアクセスできます。以下のように指定します。

シーケンス型[インデックス]

サンプル

以下のコードでは、インデックスを用いて要素を取得しています。

l = ['a', 'b', 'c', 'd']

print(l[1])
print(l[-2])

実行結果

b
c
POINT

インデックスは、その要素が何番目の要素かで決まります。

l = ['a', 'b', 'c', 'd']
print(l[2])

# 先頭の要素を取り出す
l.pop(0)
print(l[2])

実行結果

c
d

スライス

スライスを使うことで、シーケンス型の要素をインデックスで範囲指定して取得することができます。スライスは以下のように指定します。

シーケンス型[開始:終了:ステップ]

サンプル

以下のコードでは、1 <= N < 4の範囲の要素を取得しています。

l = [1, 2, 3, 4, 5]

print(l[1:4])

実行結果

[2, 3, 4]

詳しくは以下の記事を参考にしてください。

【Python】スライスの使い方この記事では、Pythonのスライスの使い方を解説します。 スライスを使うことでリストなどのシーケンス型のオブジェクトに格納されて...

任意の要素が格納されているかどうか

in演算子を使うことで、シーケンス内に任意の要素が格納されているか調べることができます。要素が格納されていればTrue、なければFalseが返されます。

任意の要素 in シーケンス

notを付けることで、評価を逆転させることができます。つまり、任意の要素が格納されていなければTrue、あればFalseが返されます。

任意の要素 not in シーケンス

サンプル

以下のコードでは、リスト内に特定の要素が格納されているか調べています。

l = [1, 2, 3, 4, 5]

print(3 in l)
print(6 in l)

print(3 not in l)
print(6 not in l)

実行結果

True
False
False
True

長さの取得

len関数で長さを取得できます。

len(シーケンス)

サンプル

以下のコードでは、リストの長さ(要素数)を出力しています。

l = [1, 2, 3, 4, 5]

print(len(l))

実行結果

5

min・max

min関数で最小値、max関数で最大値を取得できます。

min(シーケンス)
max(シーケンス)

サンプル

以下のコードでは、リストの最大値と最小値を出力しています。

l = [1, 2, 3, 4, 5]

print(min(l))
print(max(l))

実行結果

1
5

もちろん、文字列にも使用可能です。

s = 'Hello'

print(min(s))
print(max(s))

実行結果

H
o
POINT

文字は、文字コードで比較されます。

print(ord('H'))
print(ord('e'))
print(ord('l'))
print(ord('o'))

実行結果

72
101
108
111

要素のインデックスを調べる

シーケンス型のindexメソッドを使うことで、任意の要素のインデックスを調べることができます。

シーケンス.index(任意の要素)

サンプル

以下のコードでは、文字列中に含まれる「c」のインデックスを出力しています。

s = 'abcd'

print(s.index('c'))

実行結果

2

指定した要素がシーケンス内に複数格納されている場合は、最初に見つけた要素のインデックスのみを返します。

s = 'abcdabcd'

print(s.index('c'))

実行結果

2

要素の出現回数

シーケンス型のcountメソッドを使うことで、任意の要素がいくつ格納されているか調べることができます。

シーケンス.count(任意の要素)

サンプル

以下のコードでは、文字列中に「l」が何回使用されているかを出力しています。

s = 'Hello'

print(s.count('l'))

実行結果

2

イミュータブルなシーケンス型でできること

イミュータブルなシーケンス型には、タプルや文字列などがあります。こちらの型では、hash()が使えます。hash()は、オブジェクトのハッシュ値を返します。

s = 'Hello'
t = (1, 2, 3)

print(hash(s))
print(hash(t))

実行結果

6476563759824948484
2528502973977326415

hash()が使えることにより、辞書のキーとして使うことができます。

ミュータブルなシーケンス型でできること

ミュータブルなシーケンス型には、リストなどがあります。こちらの型では、以下のようなことができます。

要素の変更

インデックスでアクセスした要素を変更することができます。

シーケンス[インデックス] = 値

サンプル

以下のコードでは、2番目の要素を書き換えています。

l = [1, 2, 3]

l[1] = 0
print(l)

実行結果

[1, 0, 3]

要素の追加

appendメソッドを使うことで、任意の要素をシーケンスの最後に追加できます。

シーケンス.append(任意の要素)

サンプル

以下のコードでは、リストに要素を追加しています。

l = [1, 2, 3]

l.append(4)
l.append('a')
print(l)

実行結果

[1, 2, 3, 4, 'a']

全ての要素の削除

clearメソッドを使うことで、シーケンスの要素を全て削除できます。

シーケンス.clear()

サンプル

以下のコードでは、リストの要素を全て削除しています。

l = [1, 2, 3]

l.clear()
print(l)

実行結果

[]

シーケンスの拡張

extendメソッドを使うことで、引数に指定されたイテラブルオブジェクトでシーケンスを拡張します。

シーケンス.extend(イテラブルオブジェクト)

また、+=を使っても同じように処理できます。

シーケンス += イテラブルオブジェクト

サンプル

以下のコードでは、リストを拡張しています。

l = [1, 2, 3]

l.extend(['a', 'b', 'c'])
print(l)

l += {11, 12, 13}
print(l)

実行結果

[1, 2, 3, 'a', 'b', 'c']
[1, 2, 3, 'a', 'b', 'c', 11, 12, 13]

繰り返し更新

*=演算子を使うことで、シーケンスの内容を繰り返したもので更新します。

シーケンス *= 整数

サンプル

以下のコードは、リストを2回繰り返し、その値で更新しています。

l = [1, 2, 3]

l *= 2
print(l)

実行結果

[1, 2, 3, 1, 2, 3]

要素の挿入

insertメソッドを使うことで、位置を指定して要素を挿入できます。

シーケンス.insert(インデックス, 値)

サンプル

以下のコードでは、リストに要素を挿入しています。

l = [1, 2, 3]

l.insert(2, 0)
print(l)

実行結果

[1, 2, 0, 3]

要素を取り出す

popメソッドを使うことで、要素を取り出すことができます。

シーケンス.pop(インデックス)

サンプル

以下のコードでは、リストの要素を変数に取り出し、その変数とリストを出力しています。

l = [1, 2, 3]

num = l.pop(1)
print(l)
print(num)

実行結果

[1, 3]
2

要素の削除

removeメソッドを使うことで、任意の要素を削除することができます。シーケンス内に削除する要素が複数格納されている場合、最初に見つけた要素のみを削除します。

シーケンス.remove(値)

サンプル

以下のコードでは、リストの任意の要素を削除しています。

l = [1, 2, 3, 1, 2]

l.remove(2)
print(l)

実行結果

[1, 3, 1, 2]

逆順にする

reverseメソッドを使うことで、シーケンスに格納されている要素を逆順にすることができます。

シーケンス.reverse()

サンプル

以下のコードでは、リストを逆順にして出力しています。

l = [1, 2, 3]

l.reverse()
print(l)

実行結果

[3, 2, 1]

まとめ

この記事では、Pythonのシーケンス型について解説しました。シーケンス型は、リストや文字列などの順番を持った複数のデータを扱う型のことを言います。

とてもよく使う型ばかりなので、覚えておきましょう!

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ

参考シーケンス型 — Python 3.9.1 ドキュメント

【おすすめ】Python参考書

一冊目におすすめ

created by Rinker

プログラミング初心者の方向き。とても優しい内容になっています。

二冊目におすすめ

created by Rinker

他言語を学んだことある方や中級者にスキルアップを目指している方向けです。

ゲーム開発に興味があるなら

created by Rinker

本書では基礎を学びながらゲームを作っている雰囲気を味わうことできます。