【发布时间】:2019-01-29 21:16:33
【问题描述】:
各位程序员好,
我是编程新手,想知道是否有人可以帮助我解决问题?我不确定这是因为它的写作方式,还是它只是一种真实但矛盾的做事方式。
我目前正在从“一日学习 Python”一书中学习 Python,他们对列表切片的解释让我感到困惑。一开始,他们声明各个索引总是从零开始,但在后面的示例中,他们似乎使用“1”作为起点(?)并以索引 5 - 1 结束?
他们在下面使用的例子是:userAge = [21, 22, 23, 24, 25]
在一开始,在下面的摘录中,他们解释了 21 = 0 的索引,22 = 1、23 = 2、24 = 3 和 25 = 4 的索引。
但是当他们到达提取的底部时,他们正在谈论第 5 个索引(尽管上面的示例中没有)...
这是本书的摘录。我强调了让我感到困惑的部分:
“列表中的各个值都可以通过它们的索引访问,并且索引总是从零开始,而不是从 1。这是几乎所有编程语言的常见做法,例如 C 和Java。因此第一个值的索引为 0,下一个值的索引为 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
【问题讨论】:
-
userAge[1: ]是一个从索引 1 开始(显式写入)并在此特定情况下以索引 4 结束的切片(长度为 5,未指定的结束索引的默认值为 length-1)。不清楚你为什么认为这里发生了任何不同的事情。 -
不,索引方法没有变化,总是从0开始。可以认为:切片的第一部分是第一个要包含的索引,第二部分是第一个索引之后不包含。您似乎将其视为指定要包含的第一个和最后一个索引,这导致了混乱。
-
在对
userAge[1:]进行切片时,它会获取从 2nd 元素一直到最后一个元素的所有内容。 -
我一直发现official Python tutorial 足以解释这些事情。 strings 部分包含对切片的讨论。
-
@VictorValente - 所以,他们的注释“最后的项目总是被排除在外”在这种情况下不适用?
标签: python list slice notation