仅访问列表中的最后一个元素与访问范围以包括列表中的最后一个元素的区别

Difference in accessing only last element from a list vs accessing a range up to including the last elements from a list

提问人:VMMF 提问时间:6/16/2023 最后编辑:petezurichVMMF 更新时间:6/17/2023 访问量:41

问:

现在我正在使用 Python,用于使用 Matlab 语法,这个例子令人困惑:

我有一个列表,我想访问它的最后一个元素,比方说list_a = [0,1,2,3,4,5,6,7,8,9]

在 Python 中,我必须做,而在 Matlab 中我会做list_a [-1] = 9list_a(end)

所以在我看来,Python 中的最后一个元素意味着 Matlab 中的关键字。-1end

然后我想访问列表中的最后 5 个元素,包括最后一个元素。

在Matlab中,我会做.Matlab 数组的第一个索引是 1 而不是 Python 中的 0,这就是为什么我必须从索引 6 开始。list_a (6:end)

在我看来,这样做是合乎逻辑的,因为意味着列表的最后一项,如上例所示。但是,这在 Python 中不起作用,因为返回的结果是 所以要在 Python 中获取列表的最后一个元素,我必须这样做并留空list_a[5:-1]-1[5, 6, 7, 8]list_a[5:]

我不知道他们为什么决定这样做,但我想知道 Python 中是否有一些东西可以使用,例如 Matlab 中的 end 关键字,它适用于列表索引和切片。谢谢

Python 列表 Matlab 切片

评论

1赞 Cris Luengo 6/17/2023
另外: 是 的一组不同的元素。反转顺序也会更改包含的元素。我同意MATLAB方法在许多情况下更直观。Python 方式也有一些优点,但我不太喜欢它。a[4:7]a[7:4:-1]
0赞 John BG 6/17/2023
这是一个 Python 问题,而不是 MATLAB 问题。

答:

1赞 Programmer-RZ 6/16/2023 #1

例如,在对数组进行切片时,不包括 y。python 切片数组的方式是从 开始,结束于 。list[x:y]xy-1

现在,当您在切片列表时添加关键字时,python 会将其作为列表的末尾。例如,如果我这样做,它将抓取索引 1 到最后一个索引。令人困惑,但这就是 python 的工作方式。Nonelist[1:None]

留空与 相同。因此,在您的示例中,与 .Nonelist_a[5:]list_a[5:None]

至于你的问题,从技术上讲,你可以在python中用作END关键字。None

评论

0赞 VMMF 6/16/2023
哦,我明白!好主意。但是,list_a[None] 不会生成列表的最终值
2赞 Programmer-RZ 6/16/2023
切片时@VMMF使用 None。索引时,可以使用 -1。就像我说的,python 令人困惑