python - 如何将 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 等的目的。
解决方案
您可以使用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
但你实际上不应该这样做。性能提升很小,您的代码可读性会降低。
请记住,过早的优化是万恶之源。
推荐阅读
- powershell - 尝试使用 powershell 访问共享点在线列表 REST API 时出错
- javascript - 带有反应和节点的嵌套表单
- python - 如何使用numpy获得线性方程组解的整数部分?
- amazon-ecs - 如何在 AWS ECS 容量提供程序中计算目标容量百分比
- intellij-idea - Intellij Rust 插件不正确的“未解决的参考”错误
- arrays - PostgreSQL:比较两个数组是否存在第二个数组中的任何一个值
- javascript - 将json字符串化为多个数组的逻辑
- ebay-api - eBay oauth 令牌(和刷新令牌)有多长?
- vue.js - 如何根据浏览器动态支持的内容在使用网格布局的模板和使用 Flex 的模板之间切换?
- c++ - 如何在 C++ 中用相反的小写字母替换字符串中的每个小写字母?