7

Pythonリストの最後の要素が必要だと言わないでください:違いは何ですか

myList[-1:][0]

myList[len(myList)-1]

違いはないと思ったのですが、やってみました

>>> list = [0]
>>> list[-1:][0]
0
>>> list[-1:][0] += 1
>>> list
[0]
>>> list[len(list)-1] += 1
>>> list
[1]

ちょっとびっくりしました...

4

3 に答える 3

14

スライス[-1:]を使用する場合、返されるリストは浅いコピーであり、参照ではありません。したがって、[-1:][0]は新しいリストを変更します。[len(list)-1]は最後のオブジェクトへの参照です。

于 2009-03-25T11:15:40.187 に答える
9

list[-1:]新しいリストを作成します。list[len(list)-1]ある種のビューを返す必要があるのと同じ動作を得るにはlist、しかし、私が言ったように、それは新しい一時的なリストを作成します。次に、一時リストの編集に進みます。

list[-1]とにかく、あなたはあなたが同じことのために使うことができることを知っていますよね?

于 2009-03-25T11:17:16.657 に答える
3

スライスするとコピーが作成されます(浅いコピー)。浅いコピーのイディオムとしてよく使用されます。

すなわち

list2 = list1[:]

と同等です

import copy
list2 = copy.copy(list1)
于 2009-03-25T11:34:54.913 に答える