如何获取迭代器的最后一个元素?我知道我必须用尽迭代器并返回它生成的最后一个值,所以简单的方法是:
def last(it):
for value in it:
pass
return value
(您可能想抓住NameError
并提出其他内容以供空输入,但您会明白的。)
有没有想到的更简单的解决方案? G。使用itertools.islice()
(虽然它似乎不接受否定索引)或类似的东西?
答案 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模块中的消耗示例。