在Python中获取列表的最后一个元素

时间:2009-05-30 19:28:54

标签: python list indexing

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

20 个答案:

答案 0 :(得分:2630)

some_list[-1]是最短和最Pythonic。

事实上,您可以使用此语法执行更多操作。 some_list[-n]语法获取第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将引发异常,因为空列表不能包含最后一个元素。

答案 1 :(得分:215)

如果您的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对象更像是“最后一个元素”,然后是异常对象。

答案 2 :(得分:81)

你也可以这样做:

alist.pop()

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

答案 3 :(得分:61)

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

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

还有很多其他方法可以达到这样的目标,但这些方法很简单,很容易使用。

答案 4 :(得分:37)

  

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

要获取最后一个元素,

  • 未修改列表,
  • 假设你知道列表最后一个元素(即它是非空的)

-1传递给下标符号:

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

说明

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

我修改了一个示例from the documentation来指示每个索引引用的序列中的哪个项目,在本例中为字符串"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有一个函数用于first()和last(),就像Lisp一样...它会消除很多不必要的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'

仅在

时执行此操作
  • 您知道列表中包含元素,或者如果它为空,则准备处理异常
  • 您打算从列表中删除最后一个元素,将其视为堆栈。

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

保留其余的反向以供日后使用:

我不知道你为什么要这样做,但为了完整起见,因为reversed会返回 迭代器 (它支持迭代器协议)您可以将其结果传递给next

>>> 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

答案 5 :(得分:11)

mylist = [ 1 , 2 , 3 , 4 , 5]

#------------------------------------
# Method-1 : Last index
#------------------------------------

print(mylist[-1])


#------------------------------------
# Method-2 : Using len 
#------------------------------------

print(mylist[len(mylist) - 1])


#------------------------------------
# Method-3 : Using pop, pop will remove the last 
#            element from the list.
#------------------------------------

print(mylist.pop())

答案 6 :(得分:10)

如果你想获取列表的最后一个值,你应该使用:

your_list[-1]

如果你想获取值,并且从列表中删除,你可以使用:

your_list.pop()

OR:你也可以弹出索引......

your_list.pop(-1)

答案 7 :(得分:9)

  

some_list = [1,2,3]

方法1:

some_list[-1]

方法2:

**some_list.reverse()** 

**some_list[0]**

方法3:

some_list.pop() 

答案 8 :(得分:7)

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'

答案 9 :(得分:5)

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

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

答案 10 :(得分:5)

好的,但几乎所有语言方式都有共同点SELECT SC.dtDateCreated,V.USER_NAME, SC.iEDV, SC.sComments, sDescription, SC.iStatus FROM T_STATUS_CLIC SC INNER JOIN T_STATUS S ON SC.iSTATUS = S.iSTATUS LEFT OUTER JOIN V_EMPLOYEES_MANAGER V on SC.iEDV = V.USER_EDV WHERE SC.iClic = @iClic ORDER BY SC.dtDateCreated ?这是IMO获取最后一个元素的最简单方法,因为它不需要任何 pythonic 知识。

答案 11 :(得分:2)

为防止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'

答案 12 :(得分:2)

Pythonic 方式

所以让我们考虑一下我们有一个列表 a = [1,2,3,4],在 Python 列表中可以操作给我们它的一部分或其中的一个元素,使用以下命令可以轻松获取最后一个元素。

print(a[-1])

答案 13 :(得分:1)

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

next(reversed(some_list), None)

答案 14 :(得分:1)

为了避免“IndexError: list index out of range”,可以使用这段代码。

export type TextFieldType = {
  status: React.Dispatch<React.SetStateAction<boolean>> 
}

答案 15 :(得分:1)

您只需要获取并放置 [-1] 索引。例如:

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

您将得到 2 作为输出。

答案 16 :(得分:0)

这是您查询的解决方案。

a=["first","middle","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 the last item in the list.
print(a[-2]) #prints the last second item in the list.

输出:

>>> first
>>> last
>>> middle

答案 17 :(得分:0)

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

答案 18 :(得分:0)

在 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 方法将从列表中删除最后一个元素。

答案 19 :(得分:0)

找不到任何提及此事的答案。所以补充。

你也可以试试some_list[~0]

那是波浪号符号