可能是一个愚蠢的问题,但我一般想知道,如果有人知道,Python 解释器有多少远见,特别是在正则表达式和文本解析领域。
假设我的代码在某个时候看起来像这样:
mylist = ['a', 'b', 'c', ... ]
if 'g' in list: print(mylist.index('g'))
有没有更安全的方法可以使用 while 循环或类似方法来做到这一点。我的意思是,是否会从一开始就进行第二次解析来查找索引,还是 Python 认为两个 g(在上面的行中)是同一件事?
可能是一个愚蠢的问题,但我一般想知道,如果有人知道,Python 解释器有多少远见,特别是在正则表达式和文本解析领域。
假设我的代码在某个时候看起来像这样:
mylist = ['a', 'b', 'c', ... ]
if 'g' in list: print(mylist.index('g'))
有没有更安全的方法可以使用 while 循环或类似方法来做到这一点。我的意思是,是否会从一开始就进行第二次解析来查找索引,还是 Python 认为两个 g(在上面的行中)是同一件事?
它会进行两次查找。如果值得(例如,一个非常大的列表),请使用try
:
try:
print(mylist.index('g'))
except ValueError:
pass
包含检查的结果没有被缓存,因此需要重新发现索引。而 Python 的动态特性使得这种东西的隐式缓存不可靠,因为该__contains__()
方法可能会改变对象(尽管这样做会违反一些编程原则)。
您可以轻松地制作字典进行查找。像这样的东西:
mydict = {k:v for v,k in enumerate(mylist)}
除非您在同一个文件上进行一些这样的查找,否则创建的开销是dict
不值得的list
您的代码将导致两次查找,首先确定“g”是否在列表中,然后查找索引。Python 不会尝试将它们合并到单个查找中。如果您担心效率,您可以使用字典而不是列表,这将使查找 O(1) 而不是 O(n)。
尝试是在列表中查找元素索引的更好选择。尝试: print(mylist.index('g')) except ValueError: print "value not in list"
pass