[英]Difference between two “contains” operations for python lists
我是python的新手,发现我需要查询列表是否包含某个项目。
我在各种网站上看到的大多数帖子(包括类似的stackoverflow问题 )都提出了类似的建议
for i in list
if i == thingIAmLookingFor
return True
但是,我也从一个单独的论坛中找到了
if thingIAmLookingFor in list
# do work
作品。
我想知道if thing in list
方法中的if thing in list
是否为for i in list
方法的简写,或者是否以不同方式实现。
如果有的话,我也希望哪一个更受欢迎。
“if in in thing:”格式是首选格式,不仅因为它占用的代码较少,而且还适用于其他数据类型,并且(对我而言)更易于阅读。
我不确定它是如何实现的,但我希望它在以更易搜索的形式存储的数据类型上效率更高。 例如。 集或字典键。
if thing in somelist
的if thing in somelist
是首选且最快的方式。
使用in-operator转换为somelist.__contains__(thing)
其实现等同于: any((x is thing or x == thing) for x in somelist)
。
注意条件测试身份然后是相等。
for i in list
if i == thingIAmLookingFor
return True
以上是测试一个项目是否存在于集合中的可怕方法。 它从函数返回 True
,因此如果您需要将测试作为某些代码的一部分,则需要将其移动到单独的实用程序函数中,或者在循环之前添加thingWasFound = False
并在if语句中将其设置为True
(和然后打破),其中任何一行都是几行样板,可以是一个简单的表达式。
另外,如果您只是thingIAmLookingFor in list
使用thingIAmLookingFor in list
,则可以通过执行更少的Python级别操作来更有效地执行(它需要执行相同的操作,但可能在C中,因为list
是内置类型)。 但更重要的是,如果list
实际上是绑定到其他集合就像一组或一本字典thingIAmLookingFor in list
将使用哈希查找机制这种类型的支持和有效得多 ,而使用for
循环将迫使Python来浏览每项目依次。
强制性的后脚本: list
是一个变量的可怕名称,它包含一个列表,因为它会影响内置list
,这会让您或任何读取代码的人感到困惑。 你最好把它命名为能够告诉你它意味着什么的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.