首页 > 解决方案 > Learn Python in One Day - 专门从书中列出切片符号混淆

问题描述

各位程序员,

我是编程新手,想知道是否有人可以帮我解决问题?我不确定这是因为它的写作方式,还是它只是一种真实但矛盾的做事方式。

我目前正在从“一日学习 Python”一书中学习 Python,他们对列表切片的解释让我感到困惑。一开始,他们声明单个索引总是从零开始,但在后面的示例中,他们似乎使用“1”作为起点(?)并以索引 5 - 1 结束?

他们在下面使用的示例是:userAge = [21, 22, 23, 24, 25]

一开始,在下面的摘录中,他们解释了 21 = 0 的索引,22 = 1、23 = 2、24 = 3 和 25 = 4 的索引。

但是当他们到达提取的底部时,他们正在谈论第 5 个索引(尽管上面的示例中没有第 5 个索引)......

这是书中的摘录。我强调了让我感到困惑的部分:

“列表中的各个值都可以通过它们的索引来访问,并且索引总是从零开始,而不是 1。这是几乎所有编程语言中的常见做法,例如 C 和 Java。因此,第一个值的索引为 0,即next 的索引为 1,依此类推。例如,userAge[0] = 21,userAge[1] = 22。

或者,您可以从后面访问列表的值。列表中最后一项的索引为 -1,倒数第二项的索引为 -2,依此类推。因此,userAge[-1] = 25,userAge[-2] = 24。

您可以将列表或其中的一部分分配给变量。如果你写 userAge2 = userAge,变量 userAge2 变成 [21, 22, 23, 24, 25]。

如果您编写 userAge3 = userAge[2:4],您将索引 2 到索引 4-1 的项目从列表 userAge 分配给列表 userAge3。换句话说,userAge3 = [23, 24]。

符号 2:4 被称为切片。每当我们在 Python 中使用切片表示法时,始终包含开始索引处的项目,但始终排除位于末尾的项目。因此,符号 2:4 指的是从索引 2 到索引 4-1(即索引 3)的项目,这就是为什么 userAge3 = [23, 24] 而不是 [23, 24, 25] 的原因。

切片符号包括称为步进器的第三个数字。如果我们写 userAge4 = userAge[1:5:2],我们将得到一个子列表,其中包含从索引 1 到索引 5-1 的每一秒数,因为步进器是 2。因此,userAge4 = [22, 24]。

此外,切片符号具有有用的默认值。第一个数字的默认值为零,第二个数字的默认值是被切片的列表的大小。例如, userAge[ :4] 为您提供从索引 0 到索引 4-1 的值,而 userAge[1: ] 为您提供从索引 1 到索引 5-1的值(因为 userAge 的大小为 5,即 userAge 有 5 个项目)。”

如果原始示例只有索引 0 - 4(尽管这意味着列表中有五个项目),我不确定他们从哪里得到“5 - 1”。这是“规则更改”还是他们将索引号从 0 更改为 4,从 1 更改为 5?我知道'5 - 1'意味着你会因为上面提到的“最终排他”而回到索引4,但你不需要那里的项目才能减去它吗?在原始示例中,没有第 5 个索引(尽管列表中有 5 个项目)...

不用说,我很困惑!哈哈。

在此先感谢您的帮助!

简。X

标签: pythonlistslicenotation

解决方案


好吧,这个摘录中有很多误导性的解释。

关于切片的默认值——忘记索引,在“人类”解释中:

  • data[x:]– 从索引开始一直切片x到最后
  • data[:x]– 从头开始​​切片,直到x第-个元素

他们所说的原因5 - 1是因为切片的第二个值是独占的,即显式切片直到长度为 N 的数组的末尾,您正在编写[:N],但最后一个元素将具有索引N-1- 正是因为索引从 0 开始,但元素计数从 1 开始。


推荐阅读