【问题标题】:How to allow the first element to be included in a reverse slice?如何允许第一个元素包含在反向切片中?
【发布时间】:2022-01-01 03:50:03
【问题描述】:

我试图弄清楚如何定义一个能够返回第一个元素的slice

>>> x = list(range(100))
>>> s = slice(91, 100, 2)
>>> x[s] 
[91, 93, 95, 97, 99]  # Highest works fine.

>>> s = slice(10, -1, -2)
>>> x[s]
[]  # Nope

>>> s = slice(10, 0, -2)
>>> x[s]
[10, 8, 6, 4, 2]  # No zero

>>> 0 in x
True

【问题讨论】:

    标签: python list slice


    【解决方案1】:

    您必须在此处使用None。您想要 x[10::-2] 的切片等效项是:

    s = slice(10, None, -2)
    x[s]
    # [10, 8, 6, 4, 2, 0]
    

    阅读此答案以充分了解 Python 中的切片是如何工作的:Understanding slice notation


    假设slice(start, stop, step) 来解释为什么您的其他示例不起作用

    • s = slice(10, 0, -2) 不包括 0 即第一个元素,因为在切片中我们需要直到 stop - 1
    • slice(10, -1, -2) 当使用负值时,切片的工作方式不同。负值表示列表后面的值。所以,上面的切片是slice(10, len(x)-1, -2)
    • s = slice(91, 100, 2) 有效,因为 99 的索引是 99(x.index(99) -> 99) 而不是 10099 低于 100,因此包含在内。
    • slice(91, 9999, 2) 将给出[91, 93, 95, 97, 99],因为大于len(x) 的值将被len(x) 替换。更多关于它Why does substring slicing with index out of range work?

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 2019-05-10
      • 2020-05-13
      • 2022-01-17
      • 2014-05-21
      • 1970-01-01
      相关资源
      最近更新 更多