代码之家  ›  专栏  ›  技术社区  ›  c0m4

list[-1:][0]和list[len(list)-1]有什么区别?

  •  7
  • c0m4  · 技术社区  · 15 年前

    以免说你想要一个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]
    

    我有点惊讶…

    3 回复  |  直到 15 年前
        1
  •  14
  •   nothrow    15 年前

    如果您使用切片[-1:],则返回的列表是一个浅副本,而不是引用。所以[-1:][0]修改新列表。[len(list)-1]是对最后一个对象的引用。

        2
  •  9
  •   Magnus Hoff    15 年前

    list[-1:] 创建新列表。获得相同的行为 list[len(list)-1] 它必须返回某种类型的视图 list 但正如我所说,它创建了一个新的临时列表。然后继续编辑临时列表。

    不管怎样,你知道你可以用 list[-1] 为了同样的事情,对吗?

        3
  •  3
  •   vartec    15 年前

    切片创建副本(浅副本)。它经常被用作一种肤浅的成语。

    list2 = list1[:]
    

    等于

    import copy
    list2 = copy.copy(list1)