关于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
。你确定这三条线首先应该在循环中吗?