YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

【解説動画あり】リストの基本メソッド|Python超入門シリーズ【第11回】

この記事では、リストの基本メソッドsort(), reverse(), count(), index(), copy()について紹介します。

リストの作成や要素の追加・削除については別記事にまとめていますので、そちらを参照してください!

【解説動画】リストのメソッド


5min. Python解説動画【入門編】|第11回目:リストの基本メソッド

メソッド一覧

要素の並び替え関係

  • sort():要素を昇順、降順で並べ替え
  • reverse():要素を逆順に並び替え

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

  • count():特定の要素が何個あるか
  • index():特定の要素の位置

リストのコピー

  • copy():リストをコピー

要素の並び替え関係

  • sort():要素を昇順、降順で並べ替える
  • reverse():要素を逆順に並び替える

sort():要素を昇順、降順で並び替え

デフォルトでは、リスト内の要素を昇順で並び替えます。

student_name = ["Ken", "Tom", "Bob"]
student_name.sort()
 
print(student_name)
# ⇒ ['Bob', 'Ken', 'Tom']	
 
# 数字の並べ替え
num = [100, 0, 20, 4]
num.sort()
 
print(num)
# ⇒ [0, 4, 20, 100]

降順にしたい場合には、キーワード引数でreverse = Trueを指定します。

student_name = ["Ken", "Tom", "Bob"]
student_name.sort(reverse=True)
 
print(student_name)
# ⇒ ['Tom', 'Ken', 'Bob']

キーワード引数というのは、引数の名前(キーワード)を指定して渡す引数のことです。

reverse():要素を逆順に並び替え

リストの要素を逆順に並び替えます。

student_name = ["Ken", "Tom", "Bob"]
student_name.reverse()
 
print(student_name)
# ⇒ ['Bob', 'Tom', 'Ken']

要素の並び替え関係

  • count(x)xが何個あるか調べる
  • index(x)xの位置を調べる

count():特定の要素が何個あるか調べる

引数で与えた要素がリスト内に何個あるか調べます。

student_name = ["Ken", "Tom", "Bob", "Tom"]
 
print( student_name.count("Tom") )
# ⇒ 2

index():特定の要素の位置を調べる

引数で与えた要素が、初めて現れる位置のインデックスを調べます。

student_name = ["Ken", "Tom", "Bob", "Tom"]
 
print( student_name.index("Tom") )
# ⇒ 1

startendを指定して、探索するインデックスの範囲を指定することもできます。

student_name = ["Ken", "Tom", "Bob", "Tom"]
 
print( student_name.index("Tom", 2, 4) )
# ⇒ 3

このとき、startendはリストのスライスと同様に、endは探索範囲に含まれません

start : endのとき、startからend-1まででxの位置を探します。

リストのコピー

  • copy():リストをコピーします

コピーが必要な理由

コピーしたいなら、別の変数に代入すればいいじゃんと思うかもしれません。

pythonでは、リストを代入するだけではコピーになりません

student_name = ["Ken", "Tom", "Bob"]
student_name_2 = student_name
 
print( student_name_2 )
# ⇒ ['Ken', 'Tom', 'Bob']
 
# student_name_2の要素を変更すると…
student_name_2[0] = "John"
# コピー元のstudent_nameの要素も変更される!
print( student_name )
# ⇒ [<span class="marker">'John'</span>, 'Tom', 'Bob']

片方のリストの要素を変更すると、もう片方のリストの要素も変わってしまいました

=の代入操作では、

  • 新しくコピーを生成するわけではなく
  • 2つの変数が同じものを指すことになるだけ

というわけです。

次の図のように同じリストに2つの名前がついている状態です。

is構文を使用すると、2つの変数が同じものを指しているかを調べることができます。

print(student_name is student_name_2)
# ⇒ True

2つの変数は同一のリストを、異なる変数名で表現しているだけということがわかります。

copy():リストをコピーする

copy()メソッドでは、=の代入操作と異なり新たにコピーしたリストを生成します。

student_name = ["Ken", "Tom", "Bob"]
student_name_2 = student_name.copy()
 
print( student_name_2 )
# ⇒ ['Ken', 'Tom', 'Bob']
 
# student_name_2の要素を変更
student_name_2[0] = "John"
print( student_name_2)
# ⇒ ['John', 'Tom', 'Bob']
 
# コピー元のstudent_nameの要素は変更されない!
print( student_name )
# ⇒ ['Ken', 'Tom', 'Bob']

copy()メソッドを使用すると、片方のリストの要素を変更しても他方のリストの要素は変更されません。

これはcopy()メソッドでは、次の図のように新たにリストが生成されるためです。

is構文を使用して、2つの変数が同一のリストを指しているか調べてみます。

print(student_name is student_name_2)
# False

たしかに、これらのリストは異なることがわかりました。

そのため、片方のリストの要素を変更しても、他方には影響しないわけですね!

ここで、注意しないといけないのは、pythonには

  • 浅いコピー
  • 深いコピー

というものがあります。

これらの違いはリスト内リストを扱う際に注意する必要があります

浅いコピーと深いコピーは複雑な話になるのでまた別の機会にご紹介したいと思います。

おわりに

今回はリストの様々なメソッドについて紹介しました!

5min. python動画解説では、pythonの基本をショートクリップで解説しています!

流し見するだけでpythonをマスターできる動画シリーズを目指しています。

5min. python解説動画

リストの作成や要素の追加・削除については別記事にまとめていますので、そちらを参照してください!