首页  >  文章  >  后端开发  >  为什么 [\'b\', \'a\', \'foo\', \'bar\']\" 中的 \"(\'a\', \'b\') 不作为需要检查列表中的多个值?

为什么 [\'b\', \'a\', \'foo\', \'bar\']\" 中的 \"(\'a\', \'b\') 不作为需要检查列表中的多个值?

Linda Hamilton
Linda Hamilton原创
2024-11-01 05:52:02165浏览

Why Doesn't

如何验证多个值属于一个列表

问题:

我需要确定列表中是否存在多个值,但以下代码会产生意外结果:

'a','b' in ['b', 'a', 'foo', 'bar']

为什么此代码未按预期运行,以及如何有效检查多个值的成员资格?

答案:

Python 将代码片段解释为元组比较,而不是所需的列表成员资格测试。要正确测试是否存在多个值,请使用以下方法:

all(x in container for x in items)

其中容器是要测试的列表或其他序列,项目是包含要查找的值的可迭代对象。

其他注意事项:

  • 速度测试:上述方法在大多数情况下表现良好,但将列表转换为集合可能会产生更快的结果。然而,这种转换可能并不总是值得的。基准测试显示,速度优势根据输入的大小和类型而变化。
  • 集合注意事项:集合可以加速可哈希元素的包含检查,但它们的创建需要内存开销。生成器提供了一种替代方案,对于具有不可散列元素的大型数据集可以更加高效。

结论:

all(x in 容器 for x in items) 方法是一种通用且高效的解决方案,用于检查列表或其他容器中多个值的成员资格。根据具体需求,转换为集合或使用生成器可能会进一步优化性能。

以上是为什么 [\'b\', \'a\', \'foo\', \'bar\']\" 中的 \"(\'a\', \'b\') 不作为需要检查列表中的多个值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn