如何获取列表的最后一个元素?

How do I get the last element of a list?

提问人:Janusz 提问时间:5/31/2009 最后编辑:OneCricketeerJanusz 更新时间:11/15/2022 访问量:3100762

问:

如何获取列表的最后一个元素?

哪种方式是首选?

alist[-1]
alist[len(alist) - 1]
列表 索引

评论


答:

3907赞 Sasha Chedygov 5/31/2009 #1

some_list[-1]是最短的,也是最蟒蛇式的。

事实上,你可以用这种语法做更多的事情。该语法获取倒数第 n 个元素。所以得到最后一个元素,得到倒数第二个元素,依此类推,一直到 ,这给了你第一个元素。some_list[-n]some_list[-1]some_list[-2]some_list[-len(some_list)]

您也可以以这种方式设置列表元素。例如:

>>> some_list = [1, 2, 3]
>>> some_list[-1] = 5 # Set the last element
>>> some_list[-2] = 3 # Set the second to last element
>>> some_list
[1, 3, 5]

请注意,如果预期项不存在,则按索引获取列表项将引发 IndexError。这意味着如果为空,则将引发异常,因为空列表不能包含最后一个元素。some_list[-1]some_list

评论

0赞 kimiahdri 9/12/2022
您也可以使用反向方法,但最后一个元素将在运行时返回。
134赞 Taurus Olson 5/31/2009 #2

您还可以执行以下操作:

last_elem = alist.pop()

这取决于您要对列表执行的操作,因为该方法将删除最后一个元素。pop()

323赞 DevPlayer 11/10/2010 #3

如果你的 or 对象可能最终为空,如下所示:或 ,那么你可能想用 而不是 for 对象“相同性”。str()list()astr = ''alist = []alist[-1:]alist[-1]

其意义在于:

alist = []
alist[-1]   # will generate an IndexError exception whereas 
alist[-1:]  # will return an empty list
astr = ''
astr[-1]    # will generate an IndexError exception whereas
astr[-1:]   # will return an empty str

区别在于,返回空列表对象或空 str 对象比异常对象更像“最后一个元素”。

96赞 Atul Arvind 8/21/2012 #4

在 python 中显示最后一个元素的最简单方法是

>>> list[-1:] # returns indexed value
    [3]
>>> list[-1]  # returns value
    3

还有许多其他方法可以实现这样的目标,但这些方法使用起来既简短又甜蜜。

6赞 Radek Anuszewski 10/8/2015 #5

好的,但是几乎每种语言方式的共同点呢?这是 IMO 获取最后一个元素的最简单方法,因为它不需要任何 pythonic 知识。items[len(items) - 1]

12赞 Sanjay Pradeep 1/10/2016 #6

另一种方法:

some_list.reverse() 
some_list[0]
9赞 Sondering Narcissist 10/7/2016 #7

list[-1]将检索列表的最后一个元素,而不更改列表。 将检索列表的最后一个元素,但它会改变/更改原始列表。通常,不建议更改原始列表。list.pop()

或者,如果出于某种原因,您正在寻找不那么 pythonic 的东西,您可以使用 ,假设列表不为空。list[len(list)-1]

7赞 Yavuz Mester 6/2/2017 #8

如果不想在列表为空时获取 IndexError,也可以使用下面的代码。

next(reversed(some_list), None)
86赞 Russia Must Remove Putin 6/24/2017 #9

在 Python 中,如何获取列表的最后一个元素?

只得到最后一个元素,

  • 在不修改列表的情况下,以及
  • 假设您知道列表最后一个元素(即它是非空的)

传递给下标表示法:-1

>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'

解释

索引和切片可以采用负整数作为参数。

我修改了文档中的一个示例,以指示每个索引引用序列中的哪个项目,在本例中,在字符串中,引用最后一个元素,字符:"Python"-1'n'

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
   0   1   2   3   4   5 
  -6  -5  -4  -3  -2  -1

>>> p = 'Python'
>>> p[-1]
'n'

通过可迭代解包进行分配

为了只获取最后一个元素,这种方法可能会不必要地实现第二个列表,但为了完整性(并且因为它支持任何可迭代 - 而不仅仅是列表):

>>> *head, last = a_list
>>> last
'three'

变量名称 head 绑定到不必要的新创建列表:

>>> head
['zero', 'one', 'two']

如果您打算对该列表不执行任何操作,则更建议:

*_, last = a_list

或者,真的,如果你知道它是一个列表(或者至少接受下标表示法):

last = a_list[-1]

在函数中

一位评论者说:

我希望 Python 有一个像 Lisp 一样的 first() 和 last() 函数......它将摆脱许多不必要的 lambda 函数。

这些定义非常简单:

def last(a_list):
    return a_list[-1]

def first(a_list):
    return a_list[0]

或使用:operator.itemgetter

>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)

无论哪种情况:

>>> last(a_list)
'three'
>>> first(a_list)
'zero'

特殊情况

如果你正在做一些更复杂的事情,你可能会发现以稍微不同的方式获取最后一个元素会更有效。

如果你是编程新手,你应该避免使用这一部分,因为它将算法的语义不同部分耦合在一起。如果在一个地方更改算法,可能会对另一行代码产生意想不到的影响。

我试图尽可能完整地提供警告和条件,但我可能错过了一些东西。如果您认为我遗漏了警告,请发表评论。

切片

列表的切片返回一个新列表 - 因此,如果我们想要将元素放在新列表中,我们可以从 -1 切片到末尾:

>>> a_slice = a_list[-1:]
>>> a_slice
['three']

这样做的好处是,如果列表为空,则不会失败:

>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
...     do_something(tail)

而尝试按索引访问会引发需要处理的问题:IndexError

>>> empty_list[-1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

但同样,仅当需要时,才应为此目的进行切片:

  • 已创建新列表
  • 如果上一个列表为空,则新列表为空。

for循环

作为 Python 的一个功能,循环中没有内部范围。for

如果您已经对列表执行了完整的迭代,则最后一个元素仍将由循环中分配的变量名称引用:

>>> def do_something(arg): pass
>>> for item in a_list:
...     do_something(item)
...     
>>> item
'three'

从语义上讲,这不是列表中的最后一件事。从语义上讲,这是名称 绑定的最后一件事。item

>>> def do_something(arg): raise Exception
>>> for item in a_list:
...     do_something(item)
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "<stdin>", line 1, in do_something
Exception
>>> item
'zero'

因此,这应该只用于获取最后一个元素,如果你

  • 已经在循环,并且
  • 您知道循环将结束(不会因错误而中断或退出),否则它将指向循环引用的最后一个元素。

获取和删除它

我们还可以通过删除并返回最后一个元素来改变我们的原始列表:

>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']

但现在原来的列表被修改了。

(-1实际上是默认参数,所以可以在没有索引参数的情况下使用):list.pop

>>> a_list.pop()
'two'

仅在以下情况下执行此操作

  • 您知道列表中有元素,或者准备处理异常(如果它为空),并且
  • 您确实打算从列表中删除最后一个元素,将其视为堆栈。

这些是有效的用例,但不是很常见。

保存其余反面以备后用:

我不知道你为什么要这样做,但为了完整起见,由于返回一个迭代器(支持迭代器协议),你可以将其结果传递给:reversednext

>>> next(reversed([1,2,3]))
3

所以这就像做相反的事情:

>>> next(iter([1,2,3]))
1

但是我想不出这样做的好理由,除非你稍后需要反向迭代器的其余部分,这可能看起来更像这样:

reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)

use_later = list(reverse_iterator)

现在:

>>> use_later
[2, 1]
>>> last_element
3
12赞 pylang 8/1/2018 #10

lst[-1]是最好的方法,但对于一般的可迭代对象,请考虑 more_itertools.last

法典

import more_itertools as mit


mit.last([0, 1, 2, 3])
# 3

mit.last(iter([1, 2, 3]))
# 3

mit.last([], "some default")
# 'some default'
26赞 Valentin Podkamennyi 4/13/2019 #11

要防止,请使用以下语法:IndexError: list index out of range

mylist = [1, 2, 3, 4]

# With None as default value:
value = mylist and mylist[-1]

# With specified default value (option 1):
value = mylist and mylist[-1] or 'default'

# With specified default value (option 2):
value = mylist[-1] if mylist else 'default'
13赞 Code Carbonate 7/3/2020 #12

这是您的查询的解决方案。

a=["first","second","second from last","last"] # A sample list
print(a[0]) #prints the first item in the list because the index of the list always starts from 0.
print(a[1]) #prints second item in list 
print(a[-1]) #prints the last item in the list.
print(a[-2]) #prints the second last item in the list.

输出:

>>> first
>>> second
>>> last
>>> second from last
1赞 Hadi Mir 12/27/2020 #13

如果执行此操作,则返回列表的最后一个元素。负序列索引表示从数组末尾开始的位置。负索引表示从末尾开始,-1 表示最后一项,-2 表示倒数第二项,以此类推。my_list[-1]

2赞 HASAN HÜSEYİN YÜCEL 3/23/2021 #14

若要避免“IndexError:列出超出范围的索引”,可以使用这段代码。

list_values = [12, 112, 443]

def getLastElement(lst):
    if len(lst) == 0:
        return 0
    else:
        return lst[-1]

print(getLastElement(list_values))
1赞 AI Nerd 5/7/2021 #15

您只需要取 and put [-1] 索引即可。例如:

list=[0,1,2]
last_index=list[-1]
print(last_index)

您将获得 2 作为输出。

2赞 Muneeb Ahmad Khurram 5/10/2021 #16

Pythonic 方式

因此,让我们考虑我们有一个列表,在 Python 中可以操纵列表来为我们提供它的一部分或它的一个元素,使用以下命令可以很容易地获得最后一个元素。a = [1,2,3,4]

print(a[-1])
3赞 Gunjan 6/4/2021 #17

在 Python 中访问列表中的最后一个元素:

1:访问具有负索引 -1 的最后一个元素

>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data[-1]
'w'

2. 使用 pop() 方法访问最后一个元素

>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data.pop()
'w'

但是,pop 方法将从列表中删除最后一个元素。

0赞 Underoos 6/24/2021 #18

找不到任何提到这一点的答案。所以添加。

你也可以试试。some_list[~0]

这就是波浪号符号

1赞 U13-Forward 9/12/2021 #19

您可以将其与以下人员一起使用:nextiter[::-1]

>>> a = [1, 2, 3]
>>> next(iter(a[::-1]))
3
>>> 
6赞 U13-Forward 10/19/2021 #20

奇怪的是还没有人发布这个:

>>> l = [1, 2, 3]
>>> *x, last_elem = l
>>> last_elem
3
>>> 

只需打开包装即可。

2赞 user2233706 11/5/2021 #21

您还可以使用长度来获取最后一个元素:

last_elem = arr[len(arr) - 1]

如果列表为空,则会出现异常,但也会遇到 .IndexErrorarr[-1]

1赞 Ali Hassan 3/8/2022 #22
array=[1,2,3,4,5,6,7]
last_element= array[len(array)-1]
last_element

另一个简单的解决方案

3赞 Supergamer 6/22/2022 #23

如果您使用负数,它将开始为您提供列表最后一个的元素 例

lst=[1,3,5,7,9]
print(lst[-1])

结果

9
4赞 Shubham Garg 6/28/2022 #24

您可以使用运算符从末尾获取第 i 个元素(从 0 开始索引)。~

lst=[1,3,5,7,9]
print(lst[~0])
5赞 Bhaskar Gupta 8/18/2022 #25

enter image description here

方法1:

L = [8, 23, 45, 12, 78]
print(L[len(L)-1])

方法2:

L = [8, 23, 45, 12, 78]
print(L[-1])

方法3:

L = [8, 23, 45, 12, 78]
L.reverse() 
print(L[0])

方法4:

L = [8, 23, 45, 12, 78]
print(L[~0])

方法5:

L = [8, 23, 45, 12, 78]
print(L.pop())

全部输出 78