言語バージョン 3.9.0

公開日 2020年12月27日 JST

コード例の出力としてprint関数を使用しています。

使用方法がわからない場合は以下のページを参照してからコード例を確認してください。

print関数の使用方法

clear(リスト、配列)

このページでは豊富な例を用いてPythonの リストクラス のclearメソッドの使い方を学ぶことができます。

clearメソッドは リストクラス(list) のメソッドの1つで、リストの要素全てを削除することができます。

引数は取らず、戻り値はNoneです。

TL;DR

基本

list1 = [1, 2, 3, 4, 5]
return_value1 = list1.clear()
print(list1)
==> []
print(return_value1)
==> None



list2 = [{'id': 1, 'name': 'Liam'}, True, 'python']
list2.clear()
print(list2)
==> []



list3 = [[1, 2, 3], [4, 5, 6]]
for e in list3:
    e.clear()
print(list3)
==> [[], []]



# del文でも同様の処理ができます
list4 = [i for i in range(5)] # リスト内包表記
print(list4)
==> [0, 1, 2, 3, 4]
del list4[:]
print(list4)
==> []

関連情報:forの使用方法

関連情報:rangeの使用方法

clearの使用が適さない場合

class Language:
    def __init__(self, name, libraries):
        self.name = name
        self.libraries = libraries
    def __repr__(self):
        return repr(vars(self))

name = 'Python'
libraries = ['datetime', 'copy', 'types']
python_language1 = Language(name, libraries)
print(python_language1)
==> {'name': 'Python', 'libraries': ['datetime', 'copy', 'types']}

# コンストラクタに渡した変数に対してclearを使用する
# 同じリストオブジェクトを参照しているため、インスタンス変数も影響を受ける
libraries.clear()
print(python_language1)
==> {'name': 'Python', 'libraries': []}

# それぞれのオブジェクトの識別値の比較
print(id(libraries) == id(python_language1.libraries))
==> True





# 解決策
name = 'Python'
libraries = ['datetime', 'copy', 'types']
python_language2 = Language(name, libraries)
print(python_language2)
==> {'name': 'Python', 'libraries': ['datetime', 'copy', 'types']}

# 新たな空のリストを再代入する
# 同じリストオブジェクトを参照していないため、インスタンス変数は影響を受けない
libraries = []
print(python_language2)
==> {'name': 'Python', 'libraries': ['datetime', 'copy', 'types']}

# それぞれのオブジェクトの識別値の比較
print(id(libraries) == id(python_language2.libraries))
==> False

関連情報:class(クラス定義)の使用方法

解説

基本

clearメソッドは呼び出し元のリストの要素を全て削除します。

clearメソッドを使用した処理はdel文を使用した処理に置き換えることもできます。

list1 = ['python', 'javascript', 'java']
return_value1 = list1.clear()
print(list1)
==> []
print(return_value1)
==> None



list2 = [1, 2, False, {'id': 1, 'name': 'Liam'}]
list2.clear()
print(list2)
==> []



# del文でも同様の処理ができます
list3 = [[i for i in range(3)], [i for i in range(3, 6)]]  # リスト内包表記
print(list3)
==> [[0, 1, 2], [3, 4, 5]]
del list3[:]
print(list3)
==> []

関連情報:rangeの使用方法

clearの使用が適さない場合

例えば以下のコード例のように既存のリストが他の変数に代入された場合、2つの変数は同じオブジェクトを参照します。
そのため、どちらか一方の変数に対してclearメソッドを使用すると予期せぬ副作用を発生させてしまう可能性があります。

そういった場合は既存のオブジェクトに対して変更を加えるのではなく、新しいリストオブジェクトを代入するなどして対処してください。

class Student:
    def __init__(self, name, friends):
        self.name = name
        self.friends = friends
    def __repr__(self):
        return repr(vars(self))

name = 'Oliver'
friends = ['Elijah', 'Liam', 'Noah']
student1 = Student(name, friends)
print(student1)
==> {'name': 'Oliver', 'friends': ['Elijah', 'Liam', 'Noah']}

# コンストラクタに渡した変数に対してclearを使用する
# 同じリストオブジェクトを参照しているため、インスタンス変数も影響を受ける
friends.clear()
print(student1)
==> {'name': 'Oliver', 'friends': []}

# それぞれのオブジェクトの識別値の比較
print(id(friends) == id(student1.friends))
==> True





# 解決策
name = 'Oliver'
friends = ['Elijah', 'Liam', 'Noah']
student2 = Student(name, friends)
print(student2)
==> {'name': 'Oliver', 'friends': ['Elijah', 'Liam', 'Noah']}

# 新たな空のリストを再代入する
# 同じリストオブジェクトを参照していないため、インスタンス変数は影響を受けない
friends = []
print(student2)
==> {'name': 'Oliver', 'friends': ['Elijah', 'Liam', 'Noah']}

# それぞれのオブジェクトの識別値の比較
print(id(friends) == id(student1.friends))
==> False

関連情報:class(クラス定義)の使用方法

1次情報

リスト型についてもう少し - データ構造 - Pythonドキュメント