python 中的切片列表

Slicing lists in python

提问人:vaanchit kaul 提问时间:3/22/2018 最后编辑:vaanchit kaul 更新时间:7/29/2020 访问量:1573

问:

关于切片操作在列表上的确切工作方式存在很多困惑。

  • 为什么 [1,2,3,4][::-1] 返回其反向?

  • 为什么 [1,2,3,4][1:-4] 返回 [] 和 [1,2,3,4][1:-4:-1] 返回 [2] ?

主要问题发生在使用负指数时。

如果有人能在内置模块中向我展示切片的确切定义,那就太好了。

编辑:为什么 [1,2,3][::-1] 和 [1,2,3][0:3:-1] 具有不同的返回值

python-2.7 切片

评论

0赞 Vipin Yadav 3/22/2018
看看这个 diveintopython3.net/native-datatypes.html#lists
0赞 vaanchit kaul 3/22/2018
@imvpn22这些都是非常基本的。我的问题更令人困惑。
1赞 pault 3/22/2018
理解 Python 切片表示法的可能副本

答:

1赞 Setop 3/22/2018 #1

列表 ['A', 'B', 'C', 'D']

索引从 0 到 size-1。

负指数意味着向后浏览列表:

       negative index   |   positive index
-5   -4   -3   -2   -1  |  0    1    2    3    4
     'A'  'B', 'C', 'D',|['A', 'B', 'C', 'D']

索引 > 4 或 < -5 抛出 IndexError。

切片遵循以下模式:List[from:to:step]

  • step,默认为 one,指示要在切片中保留哪些索引 它的标志给出了切片的方向
    • 正,从左到右,
    • 从右到左为负数
  • 从索引从哪里开始切片,包括
    • 当步长为正数时默认为 0,
    • 当 step 为负数时,默认为 -1
  • 索引到何处结束切片,独占
    • 当步长为正数时,默认为 size-1,
    • (size-1) 当步长为负数时

例子:

['A','B','C','D'][::-1] 表示从右到左,从 -1 到 -(size-1) => ['D', 'C', 'B', 'A']

['A','B','C','D'][1:-4] 表示从第二个元素到第一个元素排除,步长为 1 => nothing

['A','B','C','D'][1:-4:-1] 表示从第二个元素到第一个元素,以减一的步长排除,只剩下第二个元素 => [2]

当然,最好的办法是在使用前先试一试样品。

评论

0赞 vaanchit kaul 3/22/2018
为什么 [1,2,3][::-1] 和 [1,2,3][0:3:-1] 不一样?
0赞 Setop 3/26/2018
[::-1] 表示从头到尾,步骤 -1 给出受人尊敬的列表。[0:3:-1] 表示从开始到结束步骤 -1,这会导致空。
0赞 mckenzm 7/28/2020
这是一个重要的答案。其他语言使用 [start:run length],注意力可能会下降。
0赞 Setop 7/29/2020
@vaanchitkaul,[1,2,3][::-1] 和 [1,2,3][-1:-4:-1] 相同的。