Python中[:]与[::]的用法

本文介绍了Python中序列操作的切片语法,包括[s:i]和[s:i:j]的使用方法。详细解释了下标为负数时的计算方式,以及如何通过步长k选取序列中的元素。给出了多个示例来展示不同情况下的切片结果,帮助读者深入理解这一常见序列操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转载自优快云博主【巨輪】的博文, 原文地址: https://blog.youkuaiyun.com/u011863024/article/details/109585500

概述

[:]与 [::] 语法是通用序列操作(Common Sequence Operations)其中的两个。用 [:] 或[::]对多数序列类型(可变的或不可变的)(如字符串、列表等)序列中元素进行截取。

[:] 的用法

s[i:j]

从下标 i 到下标 j,截取序列 s 中的元素。

  1. 如果 i 或 j 为负数,则下标从序列尾部算起,也就是说,下标 i 相当于下标 len(s)+i,下标 j 相当于下标 len(s)+j。另外,-0 依然是 0。
  2. 从序列 s 的下标 i 的元素(包含)到下标 j 的元素(不包含)之间所有元素,进行截取。另外,i < j。
    • 若 i 或 j 大于 len(s),则 i 或 j 被 len(s) 取代。
    • 若 i 省略或 i 是 None 值,则 i 被 0 取代。
    • 若 j 省略或 j 是 None 值,则 j 被 len(s) 取代。
    • 若 i>=j,返回没元素的序列。
>>> a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[-1:]
[9]
>>> a[-9:-1]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> a[1:20]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:9]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> a[0:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[9:3]
[]
>>>

[::] 的用法

s[i:j:k]

从下标 i 到下标 j,步长为 k,截取序列 s 中的元素。

  1. 如果 i 或 j 为负数,则下标从序列尾部算起,也就是说,下标 i 相当于下标 len(s)+i,下标 j 相当于下标 len(s)+j。另外,-0 依然是 0。
  2. 从序列 s 的下标 i 的元素(包含)到下标 j 的元素(不包含)之间,选取下标为 i+nk 的元素(0 <= n < (j-i)/k),也就是说,选取下标为 i, i+k, i +2k, i+3*k 等等的元素,直到下标大于等于 j 为止。
    • 当 k 为正数,下标选取反向从 0 到 len(s)-1。
    • 当 k 为负数,下标选取反向从 len(s)-1 到 0。
    • 当 i 或 j 省略或是 None 值,则被端下标(0 或 len(s)-1)所取代(具体看 k 的正负符号)。
    • k 不能为 0。若 k 为 None 值,则将 k 看成 1
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[1:10:2]
[1, 3, 5, 7, 9]
>>> a[1:10:3]
[1, 4, 7]
>>> a[1:10:-2]
[]
>>> a[1:10:-3]
[]
>>> a[10:1:-2]
[9, 7, 5, 3]
>>> a[10:1:-3]
[9, 6, 3]
>>> a[::2]
[0, 2, 4, 6, 8]
>>> a[::-2]
[9, 7, 5, 3, 1]
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[-9:-1:2]
[1, 3, 5, 7]
>>> a[-9:-1:-2]
[]
>>> a[-1:-9:-2]
[9, 7, 5, 3]
>>> a[-1::-2]
[9, 7, 5, 3, 1]
>>> a[:-1:2]
[0, 2, 4, 6, 8]
>>>

参考资料

  1. Common Sequence Operations
  2. python 中的 [:-1] 和[::-1]
  3. What is :: (double colon) in Python when subscripting sequences?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值