找到两个排序列表中是否存在数字的更好方法

时间:2012-09-18 08:46:59

标签: python list sorting

我有一个像这样的排序列表

s = [1 , 4 ,6 , 9  ,10 ]

我想知道列表中是否存在数字,或者两个数字之间是否存在数字。如果它存在于两个数字之间,我想打印出来。

现在我的代码看起来像这样

for x in s:
   if b == x: \\ b is the number
       print b
   elif b > x and b < s[s.index(x) + 1] and s.index(x) < len(s):
       print b , s[s.index(x) + 1]

有更好的方法吗?

2 个答案:

答案 0 :(得分:7)

bisect module正是如此:

s = [1 , 4 ,6 , 9  ,10 ]
import bisect

x = 5
n = bisect.bisect_left(s, x)
if s[n:n+1] == [x]:
    print x, 'is in the list'
else:
    print x, 'comes between', s[n-1:n], 'and', s[n:n+1]

答案 1 :(得分:0)

这不是完美优化的,但你可以避免多次使用index()方法!

for i,j in enumerate(s,1):
 if b == j: \\ b is the number
   print b
 elif b > j and b < s[i+1] and s[i] < len(s):
   print b , s[i + 1]