有没有一种无需尝试捕获即可检索列表索引的保存方法?

Is there a save way to retrieve the index of a list without try catch?

我想知道在 python 3.

中是否有一种保存和快速检索列表中元素索引的方法

想法:

# how I do it 
try:
    test_index = [1,2,3].index(4) # error
except:
    # handle error


# how I would like to do it: 
test_index = [1,2,3].awesome_index(4) # test_index = -1
if test_index == -1: 
    # handle error

为什么我不想使用 try,except 是因为 try-except appears to be a little bit slower that an if-statement。由于我要处理大量数据,因此性能对我来说很重要。

是的,我知道我可以通过简单地遍历列表来实现 awesome_index,但我假设已经有一个函数以非常有效的方式执行此操作。

没有这样的东西,但我喜欢你的想法,所以让我们以此为基础:

如果您只有一个索引,并针对它创建了许多查询,为什么不在该索引旁边维护一个 set()dict()

numbers = [1,2,3]
unique_nunbers = set(numbers)

if 4 in unique_nunbers:
  return numbers.index(4)

字典选项:

numbers = [1,2,3]
unique_nunbers = dict(zip(numbers, range(len(numbers))))

index = unique_nunbers.get(4)
if index is None:
    # Do stuff

集合内部查找和字典 O(1),因此 4 in unique_numbers 几乎没有成本。遍历整个列表以防某些东西不存在,这是一个浪费的 O(n) 操作。

这样一来,您就有了更高效的代码,更好的算法,而且没有例外!

请记住,4 in numbers 不能说同样的话,因为它会遍历整个列表。