以Python方式仅获取迭代器的最后一个元素

时间:2019-06-04 11:55:51

标签: python iterator

如何获取迭代器的最后一个元素?我知道我必须用尽迭代器并返回它生成的最后一个值,所以简单的方法是:

def last(it):
    for value in it:
        pass
    return value

(您可能想抓住NameError并提出其他内容以供空输入,但您会明白的。)

有没有想到的更简单的解决方案? G。使用itertools.islice()(虽然它似乎不接受否定索引)或类似的东西?

4 个答案:

答案 0 :(得分:5)

一个更简单的解决方案是使用Extended Iterable Unpacking

*_, last = it

示例:

it = range(10)
*_, last = it
print(last)
# 9

答案 1 :(得分:2)

也许您可以使用

Caused by: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
    at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:352)
    at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:357)
    at sun.security.rsa.RSAPrivateCrtKeyImpl.<init>(RSAPrivateCrtKeyImpl.java:91)
    at sun.security.rsa.RSAPrivateCrtKeyImpl.newKey(RSAPrivateCrtKeyImpl.java:75)
    at sun.security.rsa.RSAKeyFactory.generatePrivate(RSAKeyFactory.java:316)
    at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:213)

其中list(it)[-1] 是迭代器。

您将其转换为列表并获取最后一个元素。

答案 2 :(得分:1)

这不是Python方式,而只是其他解决方案。如果可以的话,请使用toolz。然后,您可以执行以下操作。

from toolz import last

last(it)

答案 3 :(得分:1)

以下内容比

快26%
def last(it):
    for value in it:
        pass
    return value

像解释器一样进行迭代:

import collections
def last(iterator):
    return collections.deque(iterator, maxlen=1).pop()

如果双端队列为空,则抛出IndexError,否则返回最后一个值。

这个想法来自itertools模块中的消耗示例。