关于Python空列表的错误。未绑定本地错误

关于Python空列表的错误。未绑定本地错误,python,python-3.x,list,Python,Python 3.x,List,我运行了我的代码,它显示了以下错误 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

我运行了我的代码,它显示了以下错误

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 = []

k
0
(默认值)时,您的第一个循环(可以初始化
y
)将永远不会运行。因此,根据
centroids
的值,您可以尝试调用
y.append
(访问从未分配的
y
)或
y.index(min(y))
(同样的问题)

分析您的代码,找出
y
代表的内容,并确保它具有合理的值,然后再尝试使用它


由于
0
k
也无法分配给
lis
,使得分配
centroids=lis
从未绑定的
lis
名称读取,因此
lis
也会出现同样的问题。

这三行缩进不正确:

            new1 = [[] for x in range(len(centroids))]
            y = []
            lis = []
它们在范围(k)内i的
循环中:
但不应该在循环中,因为它们不依赖于
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 = []
        ...

我不确定,但我认为函数的其余部分也是缩进错误的。只有随机填充
质心的代码才应该在
中,如果质心为无:

k==0
时,范围(k)内i的循环
不会执行:
,因此您从未设置
y=[]
。为什么要在循环中执行这些赋值?并且每次循环都会覆盖
new1
。你确定这三条线首先应该在循环中吗?