微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 中查找可迭代元素是否为最后一个的标准方法?

如何解决Python 中查找可迭代元素是否为最后一个的标准方法?

如果我循环遍历 Python 的迭代器,我如何确定现在是否是最后一个元素?我正在寻找一些标准的库方式来做到这一点,也许是 itertools 中的一些函数,有这样的吗?或者其他一些非常简短和 Pythonic 的方法

当然,我可以实现自己的辅助生成器来完成此任务:

Try it online!

def is_last(it):
    first = True
    for e in it:
        if not first:
            yield False,prev
        else:
            first = False
        prev = e
    if not first:
        yield True,prev

for last,e in is_last(range(4)):
    print(last,e)

输出

False 0
False 1
False 2
True 3

此外,如果我在简单范围内循环,我总是可以与上限进行比较(以下是正 step解决方案):

Try it online!

start,stop,step = 10,21,3
for i in range(start,step):
    last = i + step >= stop
    print(last,i)

输出

False 10
False 13
False 16
True 19

对于简单范围的情况,以上这也是显而易见的并且可能是最简单的解决方案,不幸的是,它需要将停止/步长保留在单独的变量中。但无论如何 range-case 都不是很有趣。任何任意迭代器的情况如何,有没有 Pythonic 的方法解决这种情况?

解决方法

我以前用过这样的东西。这不是一个很好的解决方案,因为它很容易被滥用,但它可以工作。

class A:
    ...
    @classmethod
    def get_instance(cls,args):
        if len(args) == 1 and isinstance(args[0],cls):
            return args[0]
        return cls(*args)

class B:
    def __init__(self,a):
        self.a = A.get_instance(a)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。