我有一个相对较小的python程序,(部分)看起来如下:
puredata=ClassOne()
stuff=ClassTwo()
for i in range(0,len(chunks)):
print "this is in loop i = %d" % i
temp=chunks[i]
#do some stuff and get variable data.
for k in range(0,len(data)):
print "this is in loop k = %d" % k
if puredata.tb in str(temp[k])!=False:
print "This is valid data..continue calculations"
puredata.pl,puredata.pt,puredata.pi=stuff.extracts(data[k])
print "Length of pl puredata = %d" % len(puredata.pl)
print "Length of pt puredata = %d" % len(puredata.pt)
print "Length of pi puredata = %d" % len(puredata.pi)
else:
pass
stuff.extracts()吐出3个列表(类似self.a,self.b,self.c),然后传递给puredata.pl,puredata.pt,puredata.pi和ClassOne只是调用列表pl,pt,pi。 ClassTwo看起来像是:
class ClassTwo():
def __init__(self):
self.a=[]
self.b=[]
self.c=[]
# Start calculations
def extracts(self,soup):
# do stat modelling and calculations
return self.a, self.b,self.c
当我运行循环时,我发现数据似乎“附加”到puredata.pl,puredata.pt,puredata.pi,尽管我从未在代码中的任何地方使用.append()。因此,在第一个循环中,puredata.pl,puredata.pt,puredata.pi的长度为10,在下一个循环中它变为20,然后是30 ......依此类推..
我发现这很奇怪 - 而且我无法理解它。在某种程度上,这就是我想要的(我的意思是将数据附加到列表中),但我很困惑为什么它会附加,尽管我没有使用过.append()。
很抱歉,如果这是一个knoeb问题 - 这里是python新手。
答案 0 :(得分:2)
根据您提供的内容,最常见的问题是每次调用stuff.extracts时stuff.a stuff.b和stuff.c都在增长。如果在ClassTwo中执行的统计建模和计算对于每个数据[k]是唯一的,那么在循环内声明stuff = ClassTwo()可以解决您的问题。
e.g:
for k in range(0,len(data)):
stuff = ClassTwo()