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

2024-12-11 08:48:00
admin
原创
148
摘要:问题描述:如何获取列表的最后一个元素?哪种方式更可取?alist[-1] alist[len(alist) - 1] 解决方案 1:some_list[-1]是最短且最 Python 风格的。事实上,您可以使用此语法做更多的事情。此some_list[-n]语法获取倒数第 n 个元素。因此,some_list...

问题描述:

如何获取列表的最后一个元素?哪种方式更可取?

alist[-1]
alist[len(alist) - 1]

解决方案 1:

some_list[-1]是最短且最 Python 风格的。

事实上,您可以使用此语法做更多的事情。此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,因为空列表不能有最后一个元素。

解决方案 2:

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

解决方案 3:

您还可以执行以下操作:

last_elem = alist.pop()

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

解决方案 4:

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

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

还有许多其他方法可以实现这一目标,但这些方法都很简短且好用。

解决方案 5:

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

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

  • 您知道列表中有元素,或者准备好在列表为空时处理异常,并且

  • 您确实打算从列表中删除最后一个元素,将其视为堆栈。

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

保存其余反向操作以供稍后使用:

我不知道你为什么要这样做,但为了完整性,因为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

解决方案 6:

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

解决方案 7:

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

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

解决方案 8:

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:

另一种方法:

some_list.reverse() 
some_list[0]

解决方案 10:

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

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

解决方案 11:

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

next(reversed(some_list), None)

解决方案 12:

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

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

只需打开包装。

解决方案 13:

在此处输入图片描述

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

解决方案 14:

好的,但是几乎所有语言中常见的方法是什么items[len(items) - 1]?这是 IMO 获取最后一个元素的最简单方法,因为它不需要任何Python知识。

解决方案 15:

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

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

解决方案 16:

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

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

结果

9

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

解决方案 18:

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

解决方案 19:

为了避免“IndexError:列表索引超出范围”,您可以使用这段代码。

list_values = [12, 112, 443]

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

print(getLastElement(list_values))

解决方案 20:

您只需要取并放入 [-1] 索引即可。例如:

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

您将获得 2 作为输出。

解决方案 21:

Python 式方式

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

print(a[-1])

解决方案 22:

找不到任何提及此问题的答案。因此添加。

你也可以尝试some_list[~0]一下。

这是波浪符号

解决方案 23:

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

>>> a = [1, 2, 3]
>>> next(iter(a[::-1]))
3
>>> 

解决方案 24:

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

last_elem = arr[len(arr) - 1]

如果列表为空,您将会得到一个IndexError异常,但是使用 也会得到该异常arr[-1]

解决方案 25:

array=[1,2,3,4,5,6,7]
last_element= array[len(array)-1]
last_element

另一个简单的解决方案

解决方案 26:

顶部答案 ( ) 中显示的方法lst[-1]是获取列表最后一个元素的最 Python 化的方法。另一种方法是使用collections.deque标准库。关键是传递maxlen=1参数,以便其中只保留列表的最后一个元素。

from collections import deque
li = [1, 2, 3]
last_item = deque(li, maxlen=1)[0]         # 3

如果列表可以为空并且您想要避免 IndexError,我们可以将其包装在iter()+next()语法中以返回默认值:

li = []
next(iter(deque(li, 1)), 'default value')  # 'default value'

它也适用于其他可迭代对象,例如(有限)生成器。

it = iter([1, 2, 3])
last_item = deque(it, 1)[0]                # 3
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1590  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1361  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   18  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   18  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   19  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用