程序员好,
我是编程新手,想知道是否有人可以帮我解决问题?我不确定这是因为它的编写方式,还是仅仅是一种真实但相互矛盾的方式。
我目前正在从“一日学习Python”一书中学习Python,他们对列表切片的解释使我感到困惑。在开始时,它们声明各个索引始终从零开始,但是在后面的示例中,它们似乎使用“ 1”作为起始点(?),并以索引5-1结束。
他们在下面使用的示例是:userAge = [21,22,23,24,25]
在开始时,他们在下面的摘录中解释了21 = 0的索引,22 = 1、23 = 2、24 = 3和25 = 4的索引。
但是当他们到达摘要的底部时,他们正在谈论第五个索引(尽管在上面的示例中没有第五个索引)...
这是书中的摘录。我强调了让我感到困惑的部分:
”列表中的单个值可通过其索引访问,并且索引始终从零开始,而不是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的项从列表userAge分配到索引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],则由于步进为2,我们将得到一个从索引1到索引5-1的第二个数字组成的子列表。因此,userAge4 = [22,24]。 / em>
此外,切片符号具有有用的默认值。第一个数字的默认值为零,第二个数字的默认值为要切片的列表的大小。例如,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
答案 0 :(得分:0)
嗯,此摘录中有很多误导性的解释。
关于切片的默认值–用“人为”解释忘记索引:
data[x:]
–切片从索引x
一直到结尾data[:x]
–从一开始就开始切片,直到第x
个元素之所以说它们5 - 1
是因为切片的第二个值是互斥的,即要显式切片直到长度为N的数组的末尾,您正在写[:N]
,但最后一个元素将具有索引N-1
–正是因为索引从0开始,而元素计数从1开始。
答案 1 :(得分:0)
切片userAge[1:]
时,您会得到从 2nd 元素到最后一个元素的所有内容。
userAge[1:]
= [22,23,24,25]
答案 2 :(得分:0)
切片可以这样解释。
a[first:last]#items goes at first to last-1
a[first:]#items goes from first to the rest of the array
a[:last]#items from the beginning to the end-1
a[:]#copy of the whole array.
用于步骤
a[first:last:step]#starts from first, not past last,by step.
我再举一个例子,如果您要求一个[:-2]并且一个仅包含一个元素,则会得到一个空列表而不是一个错误。
因此,在这种情况下,当我们使用`userage [1:]时,一切都从第二个元素开始。