Python 列表切片,若列表长度为1,则获取最后一项

Python 列表切片,若列表长度为1,则获取最后一项,python,list,slice,Python,List,Slice,我知道如果我这样做: >> a = [1,2,3,4] >> a[:-1] Output: [1,2,3] 但是: 虽然在这种情况下,第一个是最后一个,反之亦然。如果列表长度为1,我如何选择最后一项?[-1::][/strong>表示给我列表中的最后一个元素。您可以使用或语句,它将获得以下值: ls = [1, 2, 3] v = ls[-1:] or ls[:] v [3] ls = [1] v = ls[-1:] or ls[:] v [1] 当列表中有一个

我知道如果我这样做:

>> a = [1,2,3,4]
>> a[:-1]

Output:  [1,2,3]
但是:


虽然在这种情况下,第一个是最后一个,反之亦然。如果列表长度为1,我如何选择最后一项?

[-1::][/strong>表示给我列表中的最后一个元素。您可以使用
语句,它将获得以下值:

ls = [1, 2, 3]
v = ls[-1:] or ls[:]
v
[3]

ls = [1]
v = ls[-1:] or ls[:]
v
[1]

当列表中有一个或多个元素时,这两种情况都适用。

您可以使用简单的或三元的
(如果其他情况下)

slc = a[:] if len(a) == 1 else a[:-1]

你得设法处理这个特殊情况。一种方法是使用
max
并避免使用负索引:

a[:max(1, len(a) - 1)]
也可以使用短路:

a[:-1] or a[:]

这两个结果如何不可调和。这一部分给出了所有元素,但最后一个元素显然在两种情况下都能很好地工作。在我的例子中,列表的长度不断变化。这可能会引发空列表的异常。我已经更新了我的答案。这适用于所有情况(如果列表为空,有1个或更多元素),现在它不会在列表为空的情况下引发异常。仍然没有任何意义。如果
ls
为空,则只能访问
ls[:]
,然后
ls[:]
ls[-1:]
相同。这不会导致“最后一项”,而是在包含它的列表中(如果有)。非常优雅。只需更改最后一个切片,作者要求始终获取最后一个元素,因此它必须是
a[-1:]
@Vinny,这就是他得到的。我仍然认为:
slc=a[:-1]如果len(a)!=1另外一个[:]
是一个更清晰的语法(它是一个精确的副本),在我的py2.7上运行此代码,在一个列表[1,2,3]上,结果是[1,2],因为
a[:-1]
意味着给我所有元素,但最后一个除外。@Vinny,这不是OP想要的吗?再读一遍你说得有道理,这个问题不是很清楚,但我仍然相信这是答案。它是有效的!你能解释一下删除负面索引是如何工作的吗?等等,我想我明白了,它永远不会以这种方式达到负面索引。因此,一个只有一个项目的列表将只是列表[:1]。正如您所理解的,这并没有什么魔力。空列表和长度为1的列表将分别为list[:1]和rest列表[:len-1]。
a[:-1] or a[:]