list.append()的意外输出

时间:2012-03-22 19:20:26

标签: python

我很困惑:

class lin_reg:

     def __init__(self):
    ''' Executes the program '''

    Indep_Array, Dep_Array = self.Prob_Def()
    Total_Array = Indep_Array.append(Dep_Array)
    print Indep_Array, Dep_Array, Total_Array
    NumArray = len(Total_Array)

def Prob_Def(self):

    Analy_Type = raw_input('Type of Regression(linear-n,nonlinear-nl): ')
    Num_IndepVar = eval(raw_input('Number of Independent Variables: '))
    Indep_Array = []
    for IndepVar in range(Num_IndepVar):
        ArrayInput = eval(raw_input('Enter the array: '))
        Indep_Array.append(ArrayInput)
    Dep_Array = eval(raw_input('Enter the dependent array: '))
    return Indep_Array, Dep_Array

当我运行此代码时,我得到如下输出:

obs=lin_reg.lin_reg()
Type of Regression(linear-n,nonlinear-nl): nl
Number of Independent Variables: 3
Enter the array: [1,2,3]
Enter the array: [2,3,4]
Enter the array: [3,4,5]
Enter the dependent array: [5,6,7]
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [5, 6, 7]] [5, 6, 7] None

Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    obs=lin_reg.lin_reg()
  File "C:\Python27\DataAnalysis\lin_reg.py", line 13, in __init__
    NumArray=len(Total_Array)
TypeError: object of type 'NoneType' has no len()

依赖数组Dep_Array如何自动附加到Indep_Array,为什么Total_Array会返回None

我希望看到上面输入的输出如下: [[1,2,3],[2,3,4],[3,4,5]] [5,6,7] [[1,2,3],[2,3,4],[ 3,4,5],[5,6,7]]

3 个答案:

答案 0 :(得分:7)

.append修改原始列表并返回None。你想要+

我冒昧地将代码重写为Python的外观。

class lin_reg(object):
     def __init__(self):
         self.indep, self.dep = self.initialise_from_user()
         self.total = self.indep + self.dep
         print self.indep, self.dep, self.total
         self.n = len(self.total)

def initialise_from_user(self):
    analysis_type = raw_input('Type of Regression(linear-n,nonlinear-nl): ')
    n = int(raw_input('Number of Independent Variables: '))

    indep = [np.matrix(raw_input('Enter the array: ')) for _ in range(self.n)]
    dep =  np.matrix(raw_input('Enter the dependent array: '))

    return indep, dep

答案 1 :(得分:2)

  1. Dep_Array自动附加到Indep_Array的原因是因为Indep_Array.append(Dep_Array)修改了Indep_Array

  2. 函数append返回None而不是列表。这样做是为了防止人们链接修改参数的函数,例如a.append(b).remove(c).doSomething(d)。通过防止这种情况,对于不熟悉这些方法的人来说,代码仍然清晰易懂。

答案 2 :(得分:1)

这是因为list.append()没有返回任何内容,它会更改列表。因此,

 Total_Array=Indep_Array.append(Dep_Array)

使Total_Array等于None

此外,命名约定是针对大写变量名称的。