嵌套循环中的输出长度不匹配?

时间:2013-04-20 05:49:56

标签: python arrays indexing nested-loops

我遇到了循环输出数量的问题。

neighbours=[]#this array will hold the distance to the k-th neighbour

for i in range(0, len(selection)-1):#208 values in selection

      n2 =[]#this array will hold the distance to all the other 207 points
      for k in range(0, len(selection)-1):

          d = {}
          if i != k:#to remove the same point being considered
              ra_diff = selection[i]['ra']-selection[k]['ra']
              dec_diff= selection[i]['dec']-selection[k]['dec']
              d=float(math.hypot(ra_diff , dec_diff))#finds the distance
              n2.append(d)  
      n2.sort()
      neighbours.append(n2[6])#passes the 7th value to the array

这是查找k最近邻居的代码的一部分。选择有208个值,嵌套循环应计算到所有点的距离,并找到每个点的第7个最近点。

在迭代之后,邻居数组仅保持207个值(即len(邻居)= 207),但对于所有208个值,应该存在第7个最近邻居。 任何人都可以指出我的问题在哪里?

1 个答案:

答案 0 :(得分:1)

这一行:

for i in range(0, len(selection)-1):

for k in range(0, len(selection)-1): 

可能是问题,range不包括stop参数,因此- 1缺少最后一个元素。

例如

>>> L = [1, 2, 3]
>>> range(len(L)) # goes from 0 to N - 1, where N is len(L)
[0, 1, 2]

>>> range(len(L) - 1) # goes from 0 to N - 2
[0, 1]