开发者社区> 问答> 正文

理解片符号

我需要一个关于Python切片表示法的好解释(引用是一个加分项)。 对我来说,这个符号需要理解一下。 它看起来非常强大,但我还没有完全理解它。 问题来源StackOverflow 地址:/questions/59378933/what-exactly-means-this-python-syntax-to-create-a-list-from-another-list-list1

展开
收起
kun坤 2019-12-30 09:58:14 407 0
1 条回答
写回答
取消 提交回答
  • 其实很简单:

    a[start:stop]  # items start through stop-1
    a[start:]      # items start through the rest of the array
    a[:stop]       # items from the beginning through stop-1
    a[:]           # a copy of the whole array
    

    还有step值,可以和上面的任意一个一起使用:

    a[start:stop:step] # start through not past stop, by step
    

    要记住的关键一点是:stop值表示不在所选切片中的第一个值。因此,stop和start之间的区别在于所选元素的数量(如果step是1,则为默认值)。 另一个特性是start或stop可能是负数,这意味着它从数组的末尾而不是从开头计数。所以:

    a[-1]    # last item in the array
    a[-2:]   # last two items in the array
    a[:-2]   # everything except the last two items
    

    同样,step也可以是负数:

    a[::-1]    # all items in the array, reversed
    a[1::-1]   # the first two items, reversed
    a[:-3:-1]  # the last two items, reversed
    a[-3::-1]  # everything except the last two items, reversed
    

    如果项目比您要求的少,Python对程序员很友好。例如,如果您请求一个[:-2],而a只包含一个元素,那么您将得到一个空列表,而不是一个错误。有时您可能更喜欢错误,所以您必须意识到可能会发生这种情况。 实际上,在上面的代码中,切片操作符[]与slice()对象一起使用:符号(仅在[]中有效),即:

    a[start:stop:step]
    

    等价于:

    a[slice(start, stop, step)]
    

    根据参数的数量,Slice对象的行为也略有不同,类似于range(),即支持Slice (stop)和Slice (start, stop[, step])。 为了避免指定给定的参数,可以使用None,例如,[start:]等价于[slice(start, None)]或[::-1]等价于[slice(None, None, -1)]。 虽然:based表示法对于简单的切片非常有用,但是slice()对象的显式使用简化了切片的编程生成。

    2019-12-30 09:58:27
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载