Python列表中两个“包含”操作的区别
我刚开始学习Python,发现我需要检查一个列表里是否包含某个特定的项目。
我在很多网站上看到的帖子(包括这个类似的StackOverflow问题)大多数都建议使用下面这种方法:
for i in list
if i == thingIAmLookingFor
return True
不过,我在一个小论坛上发现了另一种方法:
if thingIAmLookingFor in list
# do work
也能奏效。
我在想,if thing in list
这种写法是不是for i in list
的简化版,或者它们的实现方式有什么不同。
我也想知道这两种方法中,哪种更受欢迎。
4 个回答
1
使用 if thing in somelist
是最推荐和最快的方法。
其实,这个使用“in”的操作符在后台会变成 somelist.__contains__(thing)
,它的实现方式其实是: any((x is thing or x == thing) for x in somelist)
。
注意,这里的条件先检查的是身份(也就是是否是同一个对象),然后再检查相等性(也就是值是否相同)。
2
“if x in thing:” 这种写法是非常推荐的,不仅因为它代码更少,还因为它可以在其他数据类型上使用,而且我觉得它更容易理解。
我不太清楚它是怎么实现的,但我想在一些以更易查找的方式存储的数据类型上,它的效率会高很多,比如集合或字典的键。