Порядок операторов печати, влияющих на значения массива в Python 3.7 - PullRequest
0 голосов
/ 12 февраля 2020

Если я печатаю pts[0][0] перед набором операторов if, оператор print("final pts: ", pts) всегда печатает пустой массив. Однако если я напечатаю pts[0][0] после набора операторов if, строка print("final pts: ", pts) отобразит правильные значения.

Я считаю, что это как-то связано со строкой pts.pop(0), потому что это тоже не работает должным образом. Он не работает должным образом, когда я = 2.

Кто-нибудь может воспроизвести этот результат? Почему оператор печати влияет на значения списка?

from matplotlib.lines import Line2D
import matplotlib.pyplot as plt
import numpy as np

x = [10, 24, 23, 23, 3]
y = [12, 2, 3, 4, 2]

skpoints = list(zip(x, y))

for i in skpoints:
    print(i)

limits = np.arange(-1, 2)

pts = []
cutoff = 10
master = []

for i in range(len(skpoints)):
    pts = []
    temp = 1000
    print("\ni: ", i)
    for j in limits:
        try:
            dist = np.sqrt((skpoints[i][0] - skpoints[i + j][0]) ** 2 + (skpoints[i][1] - skpoints[i + j][1]) ** 2)
            print(dist)
            if 0 < dist < temp and (skpoints[i] and skpoints[i+j]) not in pts and dist < cutoff:
                print('pts before if statements', pts[0])

                # if its empty, add point right away
                if not master or not pts:
                    pts.append([dist, skpoints[i], skpoints[i + j]])
                # if dist is smaller than previous distance, replace distance and points
                elif dist < pts[0][0]:
                    pts.pop(0)
                    pts.append([dist, skpoints[i], skpoints[i + j]])
                elif dist == temp and (skpoints[i] and skpoints[i+j]) not in pts:
                    pts.append([skpoints[i], skpoints[i + j]])
                temp = dist
                print('pts after if statements', pts[0])
        except IndexError:
            j -= 1
    print("final pts: ", pts)


1 Ответ

1 голос
/ 12 февраля 2020

Проблема в вашем бланке try..catch; вы молча проглатываете все исключения, даже не распечатывая их следов, что значительно усложняет отладку.

Оператор print('pts before if statements', pts[0]) вызывает исключение IndexError, если pts пусто, который обходит все остальное тело l oop и, следовательно, приводит к совершенно другому результату.

...