Python:将元素放入适当的间隔

时间:2016-01-22 03:54:42

标签: python arrays

我有一个表示间隔的数组

 a=[1,3,5,7,9]

我有另一个数组

 p=[2.5,7.9,6,5.7]

我想将p的元素分发到区间中。结果数组将是间隔的下限。

例如,取第一个元素,它位于第一个区间1<2.5<3,所以我想构造一个新的数组,其长度与p的第一个元素相同间隔的界限,1,同样适用于所有其他元素。结果应为[1,7,5,5]

这是我到目前为止对数组的第一个元素,但它没有返回任何东西,代码似乎永远运行

 pl= p[:,0]
 al=np.zeros(len(pl))
 i=0
 j=0
 while i<len(a):
       while j<len(pl):
            if  pl[i][np.logical_and(a[j],a[j+1])]:
                al[i]=a[i]
                j+=1
            i+=1     

 print al

编辑1:根据回复,我对代码进行了以下更改

  al=np.zeros(len(pl))
  for i in range(len(pl)):
        for j in range(len(a)-1):
                 **if  pl[i][np.logical_and(a[j],a[j+1])]:**
                        al[i]=a[j]   

编辑(回答):我对np.logical运算符有一个非常误导性的理解,我想做的就是有一个复合条件语句a[j]<= pl[i]<a[j+1],这是正是我的代码中应该有的东西。我已将此添加到下面的答案中。对困惑感到抱歉!

2 个答案:

答案 0 :(得分:1)

   while j<len(pl):
        if  pl[i][np.logical_and(a[j],a[j+1])]:
            p_new[i]=a[i]
            j+=1    <-------##Problem lies here

所以,我认为正在发生的事情是你陷入了你的while循环。 如果你的条件不正确,J不会增加,它只是无限地重新运行(你的i也会向无穷大增加)。

看起来你想知道循环迭代的次数(len(pl)),所以for循环可能是一个更好的工具:

for i in range(len(a))
    for j in range(len(pl)):
        if  pl[i][np.logical_and(a[j],a[j+1])]:
            p_new[i]=a[i]

编辑:根据编辑和回复,我相信以下是您的目标:

a = [boundaries]
p = [p]# this can be anything
for i in p:
    for bound in a:
        if i > bound:
            pass
        else:
            p1.append(bound)

答案 1 :(得分:1)

使用如下代码:

a=[1,3,5,7,9]
pl=[2.5,7.9,6,5.7] 

for i in range(len(pl)):
         for j in range(len(a)-1):
                if  a[j]<= pl[i]<a[j+1]:
                      pl[i]=a[j]  
print  pl