Ошибка относительно Python пустого списка. UnboundLocalError - PullRequest
0 голосов
/ 03 марта 2020

Я запустил свой код, и он показывает следующие ошибки.

File "C:/Users/PC/PycharmProjects/untitled/test2.py", line 36, in clustering
min_num = y.index(min(y))
UnboundLocalError: local variable 'y' referenced before assignment

Ошибка появляется и для пустого списка 'list = []'. Ниже мой код.

 def clustering(self, parsedData=np.genfromtxt("0.txt"), iterCount=0, k=0, centroids=None):
    if centroids is None:  # when no centroids are passed in, randomize the centroids
        np.random.seed(1111)
        centroids = []
        for i in range(k):
            centroids.append(np.random.randint(0, len(parsedData[0])))  # adding centroid numbers from dataset
            new1 = [[] for x in range(len(centroids))]
            y = []
            lis = []
        for i in parsedData[0]:
            for j in centroids:
                x = []
                if i == j:
                    for k in (parsedData.ix[i][2:4]):  # calculating and adding the actual centroids to a list
                        x.append(k)
                    lis.append(x)
        centroids = lis

        iterCount += 1
        for a in range(iterCount):
            if a == 0:
                for i in (parsedData[0]):
                    for j in range(len(centroids)):
                        dist = 0
                        dist += distance(parsedData.ix[i, 2:4],
                                         centroids[j])  # same process except, centroids are not random
                        y.append(dist)
                    min_num = y.index(min(y))
                    new1[min_num].append(int(i))
                    y = []

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Эти 3 строки не имеют правильного отступа:

            new1 = [[] for x in range(len(centroids))]
            y = []
            lis = []

Они находятся внутри for i in range(k): l oop, но их не должно быть, поскольку они не зависят от i. Когда k == 0, ни одно из этих назначений не будет выполнено, поэтому более поздний код, который пытается использовать эти переменные, получит ошибку.

Отмена отступа 1 уровня.

 def clustering(self, parsedData=np.genfromtxt("0.txt"), iterCount=0, k=0, centroids=None):
    if centroids is None:  # when no centroids are passed in, randomize the centroids
        np.random.seed(1111)
        centroids = []
        for i in range(k):
            centroids.append(np.random.randint(0, len(parsedData[0])))  # adding centroid numbers from dataset
        new1 = [[] for x in range(len(centroids))]
        y = []
        lis = []
        ...

I'm не уверен, но я думаю, что все остальные функции также с отступом неправильно. Только код, который заполняет centroids случайным образом, должен быть в if centroids is None:

0 голосов
/ 03 марта 2020

Когда k равен 0 (по умолчанию), ваш первый l oop (который может инициализировать y) никогда не запускается. Поэтому, в зависимости от значения centroids, вы либо попытаетесь вызвать y.append (обращаясь к y, который никогда не был назначен), либо y.index(min(y)) (та же проблема).

Проанализируйте свой код, прежде чем пытаться его использовать, выясните, что представляет собой y, и убедитесь, что оно имеет разумное значение.

Та же проблема должна возникнуть с lis, поскольку k из 0 также не удается присвойте lis, сделав присваивание centroids = lis прочитанным из несвязанного lis имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...