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(クラス定義)の使用方法