首页 > 解决方案 > 如何将 Python3 范围与列表进行比较

问题描述

在 Python2 中,当你调用 时range,你会得到一个列表。在 Python3 中,当您调用 时range,您会获得一个范围并避免一次实例化所有元素。

我想将 rangex与 list进行比较y,以检查两个元素序列是否相同。我可以这样做list(x) == y,但这会通过不实例化所有元素而破坏了 Python3 范围应该给我的效率,因此与 Python2 相比,我有更冗长的代码而没有任何好处。我可以使用all(map(lambda p: p[0] == p[1], zip(x, y))),它使用恒定(额外)空间,但这感觉就像为了买一杯咖啡而写一份法律文件。

有没有一种方法可以占用恒定空间但使用的代码比all(...)? 更一般地说,我经常发现自己将 Python3 非列表的东西(例如 range 和 map)转换为列表,以便我可以使用简单、可读的代码来处理它们,这似乎违背了 Python3 range、map 等的目的。

标签: pythonpython-3.x

解决方案


您可以使用zip和比较这两个元素。

def compare_sequences(seq1, seq2):
    if len(seq1) != len(seq2):
        return False

    for a, b in zip(seq1, seq2):
        if a != b:
            return False
    else:
        return True

但你实际上不应该这样做。性能提升很小,您的代码可读性会降低。

请记住,过早的优化是万恶之源。


推荐阅读