有没有保存方法来检索列表的索引而无需尝试捕获?

时间:2018-07-01 19:22:39

标签: python-3.x error-handling try-except index-error

我想知道在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,是因为try-except appears to be a little bit slower that an if-statement。由于我要处理大量数据,因此性能对我很重要。

是的,我知道我可以通过简单地遍历列表来实现awesome_index,但是我认为已经有一个函数可以非常有效地做到这一点。

1 个答案:

答案 0 :(得分:1)

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

如果您只有一个索引,并针对该索引创建许多查询,为什么不在该索引旁边维护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不能说同样的话,因为它会遍历整个列表。