【问题标题】:How to make a list and class work together?如何使列表和班级一起工作?
【发布时间】:2020-01-10 07:30:57
【问题描述】:

我正在尝试在 python 中创建一个列表作为类中的对象。此示例代码(不起作用)试图创建一个包含 2 个值的列表,然后打印列表的内容

我尝试了不同的组合,包括为列表单独设置一个类,但没有成功

class Fav_fruits:

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

    def add_person(self, name,age,fruit):
        self.person_all.append(name,age,fruit)

    def print_person(self):
        for table in self.person_all:
            print(table.name,table,age,table.fruit)


fruits1 = Fav_fruits()
name = "Smith"
age = 21
fruit = "apple"
fruits1.add_person(name,age,fruit)


name = "Jones"
age = 22
fruit = "pear"
fruits1.add_person(name,age,fruit)

fruits1.print_person()

我想打印一份列表内容,例如 史密斯 21 苹果 琼斯 22 梨

在以后的代码中,我希望能够改变询问史密斯是否改变了他最喜欢的水果并更新它

【问题讨论】:

    标签: python list class


    【解决方案1】:

    我在掌握的信息方面做得最好,但我认为这就是你想要的

    class Fav_fruits:
    
        def __init__(self):
            self.person_all = []
    
        def add_person(self, name,age,fruit):
            self.person_all.append([name, age, fruit])
    
        def print_person(self):
            for table in self.person_all:
                print(table)
            print("\n")
    
    fruits1 = Fav_fruits()
    name = "Smith"
    age = 21
    fruit = "apple"
    fruits1.add_person(name,age,fruit)
    
    
    name = "Jones"
    age = 22
    fruit = "pear"
    fruits1.add_person(name,age,fruit)
    
    fruits1.print_person()
    

    我所做的只是当你添加一个prson时,你添加了一个properteis列表,输出是

    ['Smith', 21, 'apple']
    ['Jones', 22, 'pear']
    
    

    【讨论】:

      【解决方案2】:

      与其他答案非常相似,唯一的区别是输出格式为字符串而不是列表。

      class Fav_fruits:
          def __init__(self):
              self.person_all = []
      
          def add_person(self, name,age,fruit):
              self.person_all.append([name,age,fruit])
      
          def print_person(self):
              for table in self.person_all:
                  print("{0}: {1} - {2}".format(*table))
      

      根据您的输入,结果是

      Smith: 21 - apple
      Jones: 22 - pear
      

      如果您想让它更像您想要的输出,您可以省略标点符号。我添加它是为了说明功能。

      这两种解决方案的一个问题是您的“后期代码”。寻找史密斯意味着一次搜索一项。例如..g

      def new_fruit(self, person, fruit):
         for p in self.person_all:
             if person = p[0]:
                 p[2] = fruit
                 break
      

      因此,更改您的类以将名称存储为字典键而不是列表可能会更好,具体取决于您期望它增长的大小以及您可能进行的其他潜在操作(除了添加和水果替换)可能正在考虑。字典键查找比搜索长列表要快得多。

      【讨论】:

        【解决方案3】:

        您的代码报告

        TypeError: append() takes exactly one argument (3 given)
        

        意思是append方法只接受一个参数,但是你给它三个参数,分别是名字、年龄和水果

        要将新成员添加到列表中,您可以将数据聚合到tuple

        class Fav_fruits:
        
            def __init__(self):
                self.person_all = []
        
            # aggregate data into a tuple
            def add_person(self, name, age, fruit):
                person = (name, age, fruit)
                self.person_all.append(person)
        
            # use index to retrieve your data    
            def print_person(self):
                for person in self.person_all:
                    print(person[0], person[1], person[2])
        
        
        fruits1 = Fav_fruits()
        
        name = "Smith"
        age = 21
        fruit = "apple"
        fruits1.add_person(name, age, fruit)
        
        name = "Jones"
        age = 22
        fruit = "pear"
        fruits1.add_person(name, age, fruit)
        
        fruits1.print_person()
        

        然后你会得到

        Smith 21 apple
        Jones 22 pear
        

        或者你可以试试

        • 为您的脚本构建另一个 Person 类
        • 使用namedtuple 组织您的数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-25
          • 2020-03-15
          • 2012-09-06
          • 2017-06-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多