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