我想知道在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,但是我认为已经有一个函数可以非常有效地做到这一点。
答案 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
不能说同样的话,因为它会遍历整个列表。