【问题标题】:Nested for loops only run once嵌套的 for 循环只运行一次
【发布时间】:2018-07-24 06:53:50
【问题描述】:

我正在尝试在 python 中运行最近邻排序。我有一个充满点的dataFrame,例如:

       x      y
1     10   10.0
2     26   11.0
3     27   20.0
4     36   19.0
...

最多 1000 点。我试图通过到数据帧中任何未使用点的最短距离对这些点进行排序。我目前用来进行这种排序的代码如下所示。

for j in range(0, len(data)-2):
    minDist = 1000000
    k = j+1
    for i in range(k, len(data)-1):
        #dist1 = distance.euclidean(j, i+1)
        dist2 = distance.euclidean(j, i)

        if(dist2<minDist):
            minDist = dist2
            print(minDist)
            minI = data.iloc[i]

    b, c = data.iloc[j+1].copy(), data.iloc[i].copy()
    data.iloc[j+1],data.iloc[i] = c, b

但是,当我运行这段代码时,我的输出数据文件只移动了一个数据点,这不是正确的数据点,如下所示:

         x      y
1     10.0   10.0
2    624.0  436.0
3     26.0   11.0
4     27.0   20.0

我认为嵌套的 for 循环存在一些问题,但我不确定。我的 for 循环有什么错误吗?还是只是我在 Python 中处理问题的方式有问题?

【问题讨论】:

标签: python pandas for-loop dataframe nested-loops


【解决方案1】:

如果您尝试嵌套 for 循环,那么您做错了,因为第一个 for 循环使用的缩进不正确。要嵌套它们,您必须执行以下操作:

for j in range(0, len(data)-2):
    minDist = 1000000
    k = j+1
    for i in range(k, len(data)-1):
        #dist1 = distance.euclidean(j, i+1)
        dist2 = distance.euclidean(j, i)

        if(dist2<minDist):
            minDist = dist2
            print(minDist)
            minI = data.iloc[i]

    b, c = data.iloc[j+1].copy(), data.iloc[i].copy()
    data.iloc[j+1],data.iloc[i] = c, b

【讨论】:

  • 是的,对不起。它只是复制错误。这是我的代码的格式,我会在帖子中修复它
【解决方案2】:

问题的解决方案:

第二个循环没有相对于第一个循环进行迭代,因此添加了“k=j+1”行。

还添加了 minDist = 10000000,以确保第一次比较是正确的并且没有跳过初始点。

for j in range(0, len(data)-1):
minDist = 1000000
k = j+1
for i in range(k, len(data)):
    #dist1 = distance.euclidean(j, i+1)
    dist2 = distance.euclidean(data.iloc[j], data.iloc[i])

    if(dist2<minDist):
        minDist = dist2
        #print(minDist)
        minI = i

b, c = data.iloc[j+1].copy(), data.iloc[minI].copy()
data.iloc[j+1],data.iloc[minI] = c, b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2017-09-20
    • 2021-06-15
    • 2014-12-07
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多