【问题标题】:appending to list in a class附加到类中的列表
【发布时间】:2013-09-26 20:20:24
【问题描述】:

我想知道如何追加到类中的列表...

class Dataset(object):

    def __init__(self):
        self.grade=[]

    def add(self, x):
        return Dataset(self.grade.append(x))

这是我目前所拥有的一件事的一个例子。在测试中,我有...

def main():
    print('This is a program to compute the min, max, mean and')
    print('standard deviation for a set of numbers.\n')
    data = Dataset()
    while True:
        xStr = float(input('Enter a number (<Enter> to quit): '))
        if xStr == '':
            break
        data.add(xStr)

到目前为止,我的想法是否正确?

【问题讨论】:

    标签: python list class append


    【解决方案1】:

    你需要这样的东西:

    class Dataset(object):
    
        def __init__(self):
            self.grade=[]
    
        def add(self, x):
            self.grade.append(x)
    

    由于list.append 是一个变异操作,所以不需要返回任何东西。

    其次,当您将xStr 转换为浮点数时,if xStr == '' 将始终为False。最好在这里使用 try-except 因为float('') 会引发ValueError

    try:
       xStr = float(input('Enter a number (<Enter> to quit): '))
       data.add(xStr)
    except ValueError:
       break
    

    while-True 循环的另一种选择:

    from functools import partial
    par = partial(input, 'Enter a number (<Enter> to quit): ')
    for inp in iter(par, ''):
        try:
           inp = float(inp)
           data.add(inp) 
        except ValueError:
           break
    

    最后,如果您使用的是 py3.x,则无需从 object 继承,经典类已在 py3.x 中删除。

    演示:

    >>> data = Dataset()
    >>> data.add(1)
    >>> data.grade
    [1]
    

    【讨论】:

    • +1 但s = input(); if not s: 比普通异常更清楚。
    • @msw 我更喜欢 EAFP。 :)
    【解决方案2】:

    add 方法应该只是def add(self, x): self.grade.append(x)。除此之外,你是对的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2013-01-28
      相关资源
      最近更新 更多