【问题标题】:Negative index on nested list嵌套列表上的负索引
【发布时间】:2020-05-26 09:21:00
【问题描述】:

假设我有一个这样的嵌套列表:

mylist = [[],[],[]]

我想在第二个嵌套列表的末尾插入元素:

mylist[1].insert(-1, 1)
mylist[1].insert(-1, 2)

我预期的输出是:

[[], [1, 2], []]

但我得到了:

[[], [2, 1], []]

谁能给我解释一下?我认为索引 -1 总是指向列表的最后一个位置。

【问题讨论】:

  • 如果你想在列表的 end 中添加一些东西,请使用append。使用insert(-1, 会在当前最后一个元素的位置插入一些东西(这意味着它会将最后一个元素向上推并成为倒数第二个元素)。
  • 这完全解释了它,非常感谢!

标签: python list nested


【解决方案1】:

根据文档 (https://docs.python.org/3/tutorial/datastructures.html#more-on-lists),插入方法的第一个参数是要插入的元素 before 的索引...并且 -1 表示列表的最后一个元素:因此,通过调用 insert(-1,...),您插入的元素将始终成为列表中倒数第二个元素。

这很容易验证。如果你再插入一个元素

mylist[1].insert(-1, 3)

你会注意到结果列表变成了

[[], [2, 3, 1], []]

所以应该使用 append 代替。或者像这样动态计算索引

mylist[1].insert(len(mylist[1]), 3)

【讨论】:

    【解决方案2】:

    如果一个列表有例如 3 个元素,它们的编号从 0 到 2(即0, 1, 2)。

    如果您想使用负索引,它们的编号从 -3 到 -1(即-3, -2, -1)。

    现在,如果你想在-1位置插入一个新元素,和在2位置插入是一样的,即插入的元素会变成element[2]

    element[2] 将是4 元素列表 的一个元素,因此它在否定符号中的当前位置不是-1 而是-2

    element[-4], element[-3], element[-2], element[-1]
    

    【讨论】:

      【解决方案3】:

      来自this page

      list.insert(index, element) 表示您在索引index 处插入element.insert(-1, value) 表示在列表的最后一个元素处插入value (index=len(lst)-1)。所以

      mylist[1].insert(1, 1)
      mylist[1].insert(1, 2)
      

      应该能解决问题。

      另一种方法是使用append,就像另一个人所说的那样。

      mylist[1].append(1)
      mylist[1].append(2)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-02
        • 2019-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        • 2020-05-08
        相关资源
        最近更新 更多