3

私はこのようなソートされたリストを持っています

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

リストに番号が含まれているか、2つの番号の間にあるかを知りたいのですが。2つの数字の間にある場合は、それらを印刷したいと思います。

今のところ私のコードはこのように見えます

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]

そうするためのより良い方法はありますか?

4

2 に答える 2

7

bisectモジュールはまさにそれを行います:

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]
于 2012-09-18T08:49:47.890 に答える
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]
于 2012-09-18T08:52:59.047 に答える