2016-01-18 90 views
-4

我有升序矢量X值如下面的例子包裹給定值的位置:查找列表中的項目

x1 = [1, 5, 7, 9, 13, 17, 24, 30, 35, 46, 51, 60] 

我希望得到我的載體的那些價值觀的立場換一個給定的數字,二進制列表或簡單的位置:

E.g: 

Number_N = 10 --> xpos=[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0] // xpos=[3,4] 
Number_N = 50 --> xpos=[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0] // xpos=[9,10] 
Number_N = 1 --> xpos=[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] // xpos=[0,1] 

我得到一個語法錯誤在這裏:

Xpos = [1 if (l <= num & l+1 >= num) else 0 for l in x1[0:]] 
+1

還有,你試過嗎? – baldrs

+0

類似這樣的:Xpos = [1 if(l <= num&l + 1> = num)else 0 for l in x1 [0:]] – Slash

+1

請求作家作品的人? – Viroide

回答

2

這是一個bisect.bisect_right的應用程序,它在搜索值的任何現有條目之後,在已排序的集合中查找插入點。

如果n是我們輸入的號碼,那麼我們可以做到以下幾點:

idx = bisect.bisect_right(x1, 0) 

然後

xpos = [0] * len(x1) 
xpos[idx] = 1 
if idx > 0: 
    xpos[idx - 1] = 1 
+0

是的,我可以從這裏工作!我不知道算法。非常感謝! – Slash