0

我有一个相对较小的 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()。

对不起,如果这是一个 kn00b 问题 - 这里是 python 新手。

4

1 回答 1

2

根据您提供的内容,最可能的问题是,每次调用 stuff.extracts 时,stuff.a stuff.b 和 stuff.c 都会增长。如果在 ClassTwo 中执行的统计建模和计算对于每个数据 [k] 都是唯一的,那么在循环内声明 stuff = ClassTwo() 应该可以解决您的问题。

例如:

for k in range(0,len(data)):
    stuff = ClassTwo()
于 2012-11-15T16:34:11.037 回答