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 で実行されている統計モデリングと計算が各 data[k] に固有である場合、ループ内で stuff = ClassTwo() を宣言すると問題が解決するはずです。

例えば:

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