我有一个向量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:]]
答案 0 :(得分: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