値を更新したい場合は、どちらの方法が良いのでしょうか。
myList = [1, 2, 3]
変更したい場合は、リストの値を更新してください。
1つの方法はmyList[2] = 5
そして別の方法は
del myList[2]
myList[2] = 5
リスト内の要素はいくつかのオブジェクトであり、頻繁に更新されます。では、最初のメソッドで要素が実際に削除されるのはいつで、どちらのメソッドがより良いのでしょうか。
値を更新したい場合は、どちらの方法が良いのでしょうか。
myList = [1, 2, 3]
変更したい場合は、リストの値を更新してください。
1つの方法はmyList[2] = 5
そして別の方法は
del myList[2]
myList[2] = 5
リスト内の要素はいくつかのオブジェクトであり、頻繁に更新されます。では、最初のメソッドで要素が実際に削除されるのはいつで、どちらのメソッドがより良いのでしょうか。
正解はmyList[2] = 5
ただし、このコードは例外を生成します。
>>> del myList[2]
>>> myList
[1, 2]
>>> myList[2] = 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
を実行すると、長さが2になるため、最大インデックスはdel myList[2]
であり、実行することにより、存在しない場所に挿入しようとします。(オーバーランの問題) myList
1
myList[2] = 5
あなたはこのような2番目の選択肢があるかもしれません
>>> del myList[2]
>>> myList
[1, 2]
>>> myList.append(5);
>>> myList
[1, 2, 5]
ただし、値を更新するだけの場合。既存のインデックスでは、最初に選択するのmyList[2] = 5
は適切でシンプルです。最後に追加したい場合(インデックスが存在しない場合)は、append()を使用します。
最初のメソッドの要素が実際に削除されることはなく、値が変更されるだけです(つまり、別のオブジェクト/値を指します)。
2番目の方法はPythonではまったく有効ではありません。削除した後mylist[2]
、mylistには2つの要素しか含まれず、mylist[2]
もう存在しないためです。リストの途中で要素を削除した場合でも、間違った値を変更することになり、再割り当てするにはスライスする必要があります。下記参照:
mylist = [1, 2, 3]
mylist[1] = 4
print(mylist)
# [1, 4, 3]
del mylist[1]
print(mylist)
# [1, 3]
mylist[1] = 0
print(mylist)
# [1, 0]
結論:最初の方法を使用します。これは、はるかに簡単で、問題を引き起こさないためです(2番目の方法のように)。
最初のものは、Pythonが値を探す場所を変更するだけです...
>>> mylist = [1,2,3]
>>> id(mylist[2]) # check location
31108776
>>> mylist[2] = 5 # change the value
>>> mylist
[1, 2, 5] # the value has changed
>>> id(mylist[2])
31108752 # location has also changed
また、2番目は例外を生成します
>>> mylist = [1,2,3]
>>> del mylist[2]
>>> mylist[2] = 5
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
mylist[2] = 5
IndexError: list assignment index out of range
また、アイテムが削除されたために存在しなくなったリストアイテムに値を割り当てることはできません。