Categories: Python

【Python】シーケンスの使い方と特徴を解説

この記事では、Pythonのシーケンス(sequence)について解説します。

シーケンスとは、文字列やリストのような複数の要素をまとめて扱える型のことを言います。特徴的なのは要素が順序を持っていることです。

シーケンス特有の演算も定義されているので確認していきましょう❗️

シーケンスとは?

シーケンスとは、リストなどのように複数のデータを扱える型のことを言いますが、特徴的なのが格納された要素が順番を持つことです。

要素が順番を持つことによって前から2番目の要素を取得できたり、後ろから3番目の要素を取得できたりします。

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

全部よく使う型なので覚えておきましょう!

インデックス(添字)

シーケンス型の要素には、インデックス(添字)と呼ばれる番号が割り振られます。

例えば、下のようなリストでは、

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

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

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

シーケンスは名前の後ろに[インデックス]を付けることで指定したインデックスの要素を取得することができます。

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

# 先頭の要素
print(f'l[0]: {l[0]}')

# 先頭から2番目の要素
print(f'l[1]: {l[1]}')

# 末尾の要素
print(f'l[-1]: {l[-1]}')

# 末尾から2番目の要素
print(f'l[-2]: {l[-2]}')

実行結果

l[0]: a
l[1]: b
l[-1]: j
l[-2]: i

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

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

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

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

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

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

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

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

変更するには新しいオブジェクトを作成する必要があります。

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

シーケンスができること

シーケンスは以下のような処理が可能となっています。

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

シーケンス[インデックス] で要素にアクセスできます。

l = [1, 2, 3, 4]

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

実行結果

2
3

スライス

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

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

print(l[1:4])

実行結果

[2, 3, 4]

シーケンスの要素を任意の範囲で取得するスライスの使い方

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

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

l = [1, 2, 3]

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

実行結果

True
False

長さの取得

len関数 でシーケンスの長さ(要素数)を取得できます。

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

print(len(l))

実行結果

5

min・max

シーケンス内の最小値を min関数 で、最大値を max関数 で取得できます。

l = [3, 7, 1, 8, 4]

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

実行結果

1
8

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

s = 'Hello'

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

実行結果

H
o

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

index()メソッド を使うことでシーケンスに格納されている任意の要素のインデックスを調べることができます。

s = 'abcd'

# 'c'のインデックスを取得
print(s.index('c'))

実行結果

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

要素の出現回数

count()メソッド を使うことで指定した要素がシーケンスに何個格納されているか調べることができます。

s = 'Hello'

# 「l」の個数を取得
print(s.count('l'))

実行結果

2

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

イミュータブルなシーケンス型には、hash()関数 が使えます。hash()関数 は、オブジェクトのハッシュ値を返します。

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

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

実行結果

817977498342679304
529344067295497451

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

辞書(マップ)の使い方【dict】

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

ミュータブルなシーケンス型では、以下のような処理が可能です。

要素の変更

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

l = [1, 2, 3]

l[1] = 'a'
print(l)

実行結果

[1, 'a', 3]

要素の追加

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

l = [1, 2, 3]

l.append(4)
print(l)

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

実行結果

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

全ての要素の削除

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

l = [1, 2, 3]

l.clear()
print(l)

実行結果

[]

シーケンスの拡張

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

l = [1, 2, 3]

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

# extendメソッドは「+=」と同等
l += {11, 12, 13}
print(l)

実行結果

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

繰り返し更新

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

l = [1, 2, 3]

l *= 3
print(l)

実行結果

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

要素の挿入

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

l = [1, 2, 3]

l.insert(2, 'a')
print(l)

実行結果

[1, 2, 'a', 3]

要素を取り出す

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

l = [1, 2, 3]

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

実行結果

[1, 3]
2

要素の削除

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

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

l.remove(2)
print(l)

実行結果

[1, 3, 1, 2]

逆順にする

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

l = [1, 2, 3]

l.reverse()
print(l)

実行結果

[3, 2, 1]

まとめ

この記事では、Python のシーケンス型について解説しました。

シーケンス型は、リストや文字列などの順番を持った複数のデータを扱う型のことを言います。とてもよく使う型ばかりなので覚えておきましょう!

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

4週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

5か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago