我有一堆字符串列表,我需要知道其中是否有一个字符串,所以我必须在第一个列表中查找字符串,如果找不到,则在第二个列表中查找,如果找不到,则在第三个……等等。
我的问题是:什么更快?
if (string in stringList1):
return True
else:
if (string in stringList2):
return True
# ... #
等等,或者在 try/except block 中使用 index() 函数?
try:
return stringList1.index(string) >= 0
except:
try:
return stringList2.index(string) >= 0
except:
# ... #
我知道“in”是线性的,通常 python 的建议是“说抱歉比请求许可更好”(这意味着第二种方法会更好)但我想知道更有资格的人的意见: )
谢谢!
最佳答案
in
是确定某物是否在容器中的正确方法。在测试您的应用程序之前,不要担心速度微优化,发现它很慢,profiled ,并找出是什么原因造成的。到那时,通过测试进行优化(timeit 模块可能对此有好处),而不是听信网络怪人的话。如果您要进行大量包含检查,您可能希望使用
set
而不是序列;集合具有 O(1) 查找。如果这不适合您的问题,您可能需要使用列表和 bisect module ,它仍然提供优于 O(n) 序列操作的算法性能优势。有可能您真正的意思是
if any(string in s for s in iterable_of_string_lists)
或if string in string_list_1 or string in string_list_2
。嵌套 ifs 并不是像您展示的那样执行操作的最佳方式。永远不要使用空的
except:
。始终捕获特定异常,在本例中为except ValueError
。使用except:
将捕获并忽略您不希望出现的所有类型的异常,例如当用户尝试退出您的应用时出现的KeyboardInterrupt
或NameError
如果你有打字错误。
关于python - 查看字符串列表时什么更快? "In"还是 "index"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2922072/