python - 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
解决方案
好吧,这个摘录中有很多误导性的解释。
关于切片的默认值——忘记索引,在“人类”解释中:
data[x:]
– 从索引开始一直切片x
到最后data[:x]
– 从头开始切片,直到x
第-个元素
他们所说的原因5 - 1
是因为切片的第二个值是独占的,即显式切片直到长度为 N 的数组的末尾,您正在编写[:N]
,但最后一个元素将具有索引N-1
- 正是因为索引从 0 开始,但元素计数从 1 开始。
推荐阅读
- python - 类方法中的 Python 多处理池
- firebase - 将用户 uid 传递给 Flutter 中的 Firestore 流查询
- outlook - 有没有办法添加“添加团队会议”而不是添加 Zoom 会议
- android - 使用不同本地化资产时的android包命名
- python - 如何在 html 中将 pandas 数据框显示为表格?
- html - 在 HTML 中将文本与按钮的中心对齐
- python-3.x - pygame 没有可用的音频设备
- python - 数字总和
- django - 带有参数的 GET 请求时 Django url 错误,
- javascript - 使用选项数组填充 bootstrap-select