4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonのリスト(list)の追加、削除、ソートのメソッド全部を事例付きで解説。

Last updated at Posted at 2019-07-28

Pythonのリストについて知識を深めたかったので、追加、削除、ソートの3種類のメソッドを中心に
まとめました。

もう一度復習したい方はどうぞ。

##リストに要素を追加する「append」
appendメソッドは、新しい要素を指定して、リストに追加する方法です。
具体的には、指定した引数の要素をリストの最後に追加します。

【コード例】

list = ["A", "B", "C"]

# リストに要素を追加します
list.append("D")

# 追加したリストを出力します
print(list)

【出力結果】
["A", "B", "C", "D"]

##2つのリストの要素を結合する「extend」
extendメソッドを使えば、リスト単位で一気に要素を結合することもできます。
具体的には、引数に指定したリストの要素をリストの最後に追加します。

extendで追加できるオブジェクトは、文字列・リスト・タプル・辞書などです。

【コード例】

list1 = ["A", "B", "C"]

# リスト2を作成します
list2 = [1, 2, 3]

# リスト1にリスト2を結合します
list1.extend(list2) 

# 追加したリスト1を出力します
print(list1)

【出力結果】
['A', 'B', 'C', 1, 2, 3]

「append」では、リスト内にリストを追加してしまう

appendメソッドでリストを因数にした場合、リストそのものが1つの要素として追加されてしまいます。

【コード例】

list1 = ["A", "B", "C"]

list2 = ["D", "E"]

# リスト1にリスト2を追加します
list1.append(list2)

# 追加したリスト1を出力します
print(list1)

【出力結果】
["A", "B", "C", ["D", "E"]]

リスト1の中に、リスト2がリストごと追加されてしまっています。
["A", "B", "C", "D", "E"]のように、2つのリストの要素が連結されている訳ではありません。

##2つのリストの要素を結合して新しいリストを作る「+」
+演算子を使用すると、リスト同士を結合して新しいリストを作ることができます。
具体的には、2つのリストの要素を持った新しいリストを作成します。

【コード例】

list1 = ["A", "B"]

list2 = ["C", "D"]

# リスト1と2を結合します
list3 = list1 + list2

# 結合したリストを出力します
print(list3)

【出力結果】
["A", "B", "C", "D"]

##スライス機能を使って、リストに要素を追加
イコールの右に指定した要素を、リストの最後に追加します。

【コード例】

list = ["A", "B", "C"]

# リストの最後に別の要素を追加
list[len(list):len(list)] = ["D", "E", "F"]

# 追加したリストを出力します
print(list)

【出力結果】
["A", "B", "C", "D", "E", "F"]

リストの最終要素を、"D","E","F"とすることで、強引に追加しています。

4行目のスライス処理では、リストの最終要素を指定しています。

len関数を使うと、リストの最終要素のインデックスは
len(リスト) -1
として取得することができます。

したがって、リストの最終要素の次のインデックスは、
len(リスト)
という形で指定できます。

スライス処理で開始インデックスと終了インデックスの両方を、
リストの最終要素の次の位置と指定することで、リストの最終要素が指定範囲になります。

###リスト内の任意の範囲を指定できる「:」
スライス構文というものを使うと、リスト内の任意の範囲にある要素を指定できます。

範囲を指定するには、
[始点インデックス:終点インデックス]
始まりの位置と終わりの位置をコロンを挟む形によって指定します。

【コード例】

list = ["A", "B", "C", "D", "E"]

# インデックス番号 1 から 3 までの要素を取得
print(list[1:4])

【出力結果】
["B", "C", "D"]

Pythonのリストから要素を削除する5つのメソッド

いままでは追加や結合のメソッドでしたが、次は要素を削除するメソッドです。

##指定した値と同じ値の要素を削除する「remove」
removeメソッドを使うと、指定した値と同じ値を持つ要素をリストから削除する事ができます。

【コード例】

list = ["A", "B", "C", "D", "E"]

# 指定した値を削除します
list.remove("C")

# 削除したリストを出力します
print(list)

【出力結果】
["A", "B", "D", "E"]

###リスト内に一致する要素が複数ある場合、最初の1つを削除
【コード例】

list = ["A", "B", "C", "B", "E"]

# 指定した値を削除します
list.remove("B")

# 削除版のリストを出力します
print(list)

【出力結果】
['A', 'C', 'B', 'E']

リスト内に一致する要素が複数ある場合、最初に一致した要素を1つだけ削除します。

###一致する要素がない場合「ValueError」
removeメソッドでは、引数に指定された要素が見つからなかった場合、エラーとなります。

【コード例】

list = ["A", "B", "C", "D", "E"]

# 指定した値を削除します
list.remove("F")

# 削除版のリストを出力します
print(list)

【出力結果】
Traceback (most recent call last):
File "test.py", line 5, in
list.remove("F")
ValueError: list.remove(x): x not in list

引数に指定された「F」という要素が見つからなかったので、ValueErrorと出力されました。

###「remove」で削除できるのは、完全一致の要素だけ
removeメソッドでは、引数と完全一致する要素しか削除できません。
部分一致で一部の文字列が共通している要素は削除されないので注意しましょう。

【コード例】

list = ["A", "B", "CD", "D", "E"]

# 指定した値を削除します
list.remove("C")

# 削除版のリストを出力します
print(list)

【出力結果】
Traceback (most recent call last):
File "test.py", line 5, in
list.remove("C")
ValueError: list.remove(x): x not in list

"CD"という要素の中に文字列"C"は存在していますが、
removeメソッドの対象は"C"という文字列ではなく、"C"という要素ですので、
"CD"は削除されずに、ValueErrorを出力します。

##リストにある指定したインデックスの要素を削除する「del」
del文では、指定されたインデックス番号にあたるリストの要素を削除します。

【コード例】

list = ["A", "B", "C", "D", "E"]

# リストにある2番目の要素を削除
del list[1] 

# 削除版リストを出力します
print(mylist)

【出力結果】
["A", "C", "D", "E"]

###複数個のインデックスの要素を削除することも可能
def文ではインデックス番号の範囲を広げれば、複数の要素を削除することもできます。
スライス処理というものを使えば、複数のインデックス番号を範囲にとることが可能です。

【コード例】

list = ["A", "B", "C", "D", "E"]

# リストにある2~3番目の要素を削除
del mylist[1:3] 

# 削除版リストを出力します
print(mylist)

【出力結果】
["A", "E"]

##2つの指定したインデックス間にある要素を削除する「:」
スライス処理だけでも、リストの指定した範囲の要素を選択することができます。
指定した範囲の要素を空の要素を入れ替えることで、指定した範囲の要素を削除できます。

【コード例】

list = ["A", "B", "C", "D", "E"]

# リストの3~4番目の要素を削除
list[2:4] = []

# 削除版のリストを出力します
print(mylist)

【出力結果】
["A", "B", "E"]

リスト内の範囲を指定するには、
[始点インデックス:終点インデックス]
始まりの位置と終わりの位置をコロンを挟む事によって指定します。

##インデックスで指定した要素を削除する「pop」
del文と同様に使えるもので、popメソッドというものもあります。
popメソッドは指定したインデックスの要素を取得した上でリストから削除します。

【コード例】

list = ["A", "B", "C", "D", "E"]

# リストの2番目の要素を削除
list.pop(1)

# 削除版のリストを出力します
print(list)

【出力結果】
["A", "C", "D", "E"]

インデックスが指定されていない場合、リストの最後の要素を削除します。

【コード例】

list = ["A", "B", "C", "D", "E"]

# リストの最後の要素を削除
list.pop()

# 削除版のリストを出力します
print(list)

【出力結果】
["A", "B", "C", "D"]

##リスト内の要素を全て削除する「clear」
clearメソッドでは、リストのすべての要素を削除します。
リスト内の要素は0個になるので、空のリストになります。

【コード例】

list = ["A", "B", "C", "D", "E"]

# リスト内の要素を全て削除
list.clear()

# 空のリストを出力します
print(mylist)

【出力結果】
[]

スライス機能でも、リストの要素を全て削除できます

スライス機能を駆使すれば、clearメソッド同様にリストの要素を全て削除できます。

【コード例】

list = ["A", "B", "C", "D", "E"]

# リスト内の要素を全て削除
list[:] = []

# 空のリストを出力します
print(list)

【出力結果】
[]

リストの最初の要素から最後の要素までを指定して、空のリストを代入しています。
開始インデックスと終了インデックスを両方とも省略すると、全ての要素が選択範囲になります。

Pythonのリストから要素を検索する3大メソッド

list関数を使うことで、リストにデータを格納して一括で扱えるようになります。
リストに格納したデータの管理を簡略化するには、検索で見つけやすくしましょう。
ここではリスト中の要素について検索できる、演算子やメソッドを紹介します。

Pythonのリスト(list)を詳細に解説・初学者が基礎からマスター

##リストに値が含まれているか検索する「in」
ある要素がリストの中にあるかどうかを検索したい場合、in演算子を用います。
コードの書式は以下のように書きます。

検索したいオブジェクト in リスト

検索したいオブジェクトがリストオブジェクトの中に
存在している場合は、True と
存在しない場合には、False と出力されます。

###存在している場合は「True」
【コード例】

list = ["A", "B", "C"]

# リストに"B"は含まれている?
print("B" in list)

【出力結果】
True

###存在しない場合には「False」
【コード例】

list = ["A", "B", "C"]

# リストに"D"は含まれている?
print("D" in list) 

【出力結果】
False

###部分一致の場合は検索できない
in演算子の検索でカウントされるのは、完全一致の要素のみです。
部分一致の場合、カウントされず False となるので注意しましょう。
検索したい値とリスト内の値が完全一致していなければ、カウントされません。

【コード例】

list = ["A", "B", "C", "CD"]

# リストに"D"という文字は含まれている?
print("D" in list)

【出力結果】
False

リスト内に"D"という文字列が含まれていても、
リスト内に要素としてインデックスされているのは" CD "という文字列です。
「CD」では検索できても、「D」ではカウントできません。

###部分一致で検索するには「for」
ある文字列がリストの中にあるかどうかを検索したい場合、for文を加えます。
リスト内の要素を全て取り出してから再検索することで、部分検索が可能になります。

【コード例】

list = ["A", "B", "C", "CD"]
 
# リストから要素を1つずつ取り出す
for item in list :
    \# 検索したい要素がリスト内にあればTrue
    if "D" in item :
        result = True
        \# 該当する要素が見つかった時点でブレイク
        break
print(result)

【出力結果】
True

for文のループ処理によって、リストから要素を1つずつ取り出します。
if文を使い、取り出した要素に"D"が含まれているかを1つずつ検証します。
if文が成立する場合のみ、breakによってループ処理を中断してfor文を終了します。

リストに値がない場合「not in」

in演算子と真逆の性質をもった、not in演算子もあります。
コードの書式はin演算子と同様で、以下のようになります。

検索したいオブジェクト not in リスト

検索したいオブジェクトがリストオブジェクトの中に
存在する場合には、False
存在しない場合は、True と出力されます。

【コード例】

list = ["A", "B", "C", "CD"]

# リストに"B"は含まれていない?
print("B" not in list)

【出力結果】
False

検索結果に関しても、in演算子と真逆になります。
検索したい要素がリストの中に存在してしまっているので、Falseと出力されます。

【コード例】

list = ["A", "B", "C", "CD"]

# リストに"D"は含まれていない?
print("D" not in list)

【出力結果】
True

またin演算子と同様に、完全一致の場合しかカウントされません。
そのため、"D"と"CD"は別物として扱われ、"True"と出力されます。

##リスト内での位置を検索するindex
ある要素のリスト内での位置を検索したい場合には、indexメソッドを用います。

リスト.index(検索したいオブジェクト)

検索したい要素がリスト内に含まれている場合、
最初に見つかった要素のインデックス番号を返します。

【コード例】

list = ["A", "B", "C"]

# リスト内で"B"の位置は何番目?
print(list.index("B"))

【出力結果】
1

インデックス番号は0から始まる点に注意しましょう。
この場合、Bは2番目の要素なので、インデックス番号は1です。

【コード例】

list = ["A", "B", "C"]

# リスト内で"A"の位置は何番目?
print(list.index("A"))

【出力結果】
0

Aは1番目の要素なので、インデックス番号は0になります。

###検索したい要素が存在しない場合「ValueError」
位置を検索したい要素がリストに存在しない場合、ValueErrorと返します。

【コード例】

list = ["A", "B", "C", "D", "E"]
 
# リスト内で"F"の位置は何番目?
print(list.index("F"))

【出力結果】
Traceback (most recent call last):
File "test.py", line 5, in
list.index("F")
ValueError: 'F' is not in list

##リスト内に含まれている個数を検索する「count」
ある要素がリスト内に何個含まれているか検索したい場合、countメソッドを使います。

リスト.count(検索したいオブジェクト)

検索したいオブジェクトがリスト内に含まれる数を出力します。

【コード例】

list = ["A", "B", "C", "B" ,"AB"]

# リスト内に"B"は何個ある?
print(list.count("B"))

【出力結果】
2

countメソッドも完全一致で検索するので、ABは含まれません。
完全一致でなければカウントされないのは、数字でも文字列でも同じです。

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?