有没有一种无需尝试捕获即可检索列表索引的保存方法?
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
不能说同样的话,因为它会遍历整个列表。
我想知道在 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
不能说同样的话,因为它会遍历整个列表。