【发布时间】:2016-04-14 07:23:54
【问题描述】:
如果我有一个已经排序的列表并使用 in 关键字,例如:
a = [1,2,5,6,8,9,10]
print 8 in a
我认为这应该进行顺序搜索,但我可以通过二分搜索使其更快吗? 有没有一种在排序列表中搜索的 Pythonic 方式?
【问题讨论】:
-
'我认为这应该进行顺序搜索'。为什么你认为这是正在发生的事情?
-
将其转换为一个集合,然后使用“in”
-
@Lutz 因为解释器无法神奇地判断列表是否已排序?
-
@Lutz
def is_in(some_arr, val): return val in some_arr- 你认为解释器应该如何判断some_arr是否已排序。显然这是不可能的,所以它不能那样做。好吧,它可以在那里进行额外的检查,以确定列表是否已排序,然后使用二进制搜索 - 但由于这需要遍历整个列表,这反而违背了目的。 -
@Benjamin:只有在您想进行多个
in测试时,转换为集合才有帮助。如果列表已排序,二等分 (O(logN)) 将优于转换为集合 (O(N))。
标签: python sortedlist