【问题标题】:Reversing a list slice in python在python中反转列表切片
【发布时间】:2016-03-09 05:49:19
【问题描述】:

我正在尝试在 python 中反转列表的切片,但它返回一个空列表。但是当我尝试使用整个列表时,它工作正常。我在这里有什么遗漏吗?

l=[1,2,3,4,5,6,7,8]
l[::-1]=[8, 7, 6, 5, 4, 3, 2, 1]     <<< This worked fine.

l[2:5]=[3, 4, 5]
l[2:5:-1]=[]       <<< Expecting [5,4,3] here.

有什么线索吗?

【问题讨论】:

  • l[2:5][::-1] 在不同的方括号中执行它,它可以工作。
  • 您需要l[4:1:-1] 使用负步骤。 -1 不是倒车而是踩踏
  • @PadraicCunningham 为什么这不起作用,但 l[2:5:2] 确实起作用我很感兴趣
  • @EdChum,您从2 开始,然后踩-1 试图到达5,从2 到5 倒退是没有意义的
  • 因为你想从 2 倒数到 5。

标签: python reverse slice


【解决方案1】:

语法总是[start:end:step],所以如果你往回走,你的开始需要大于结束。还要记住它包括开始和不包括结束,所以你需要在交换开始和结束后减去 1。

l[5:2:-1]= [6, 5, 4]
l[4:1:-1]= [5, 4, 3]

【讨论】:

    【解决方案2】:

    切片符号是[start:stop:step]。这意味着“从start 开始,然后增加step,直到到达end。”它类似于这个构造:

    counter = 0
    stop = 10
    step = 1
    while counter < stop:
        print(counter)
        counter += step
    

    正如预期的那样,这将产生09

    现在想象一下,如果我们使用您正在使用的值进行尝试:

    counter = 2
    stop = 5
    step = -1
    while counter < stop:
        print(counter)
        counter += step
    

    如果我们真的执行这个,它会打印2,然后添加-1得到1,然后打印1并添加-1得到0,然后它会永远是-1-2等等。您必须手动停止执行以停止无限循环。

    如果您将startstop 留空,如[:4][::-1],则这表示序列的开始或结束,由step 确定。 Python 将以正值 step 前进,并以负值 step 后退(尝试使用 0step 会产生错误)。

    >>> l[2::]
    [3, 4, 5, 6, 7, 8]
    >>> l[2::-1]
    [3, 2, 1]
    >>> l[:2:]
    [1, 2]
    >>> l[:2:-1]
    [8, 7, 6, 5, 4]
    

    如果您指定的startendstep 不起作用(空的step 默认为1),Python 将简单地返回一个空序列。

    【讨论】:

      猜你喜欢
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2011-08-18
      • 1970-01-01
      相关资源
      最近更新 更多