Python中奇怪的输出

2024-04-27 00:16:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在生成员工和经理的列表。但是,我在尝试按姓氏对它们排序后得到了这个奇怪的输出(我的初始类employee只包含“name”,但没有划分为名字和姓氏)。然后,我用[1]表示姓氏)。我的代码有什么问题,因为我看不到我的员工名单。在

class Employee:
    def __init__(self, name, socialSecurityNumber, salary):
        """
        Set name, socialSecurityNumber, and salary to itself.
        """
        self.name = name
        self.socialSecurityNumber = socialSecurityNumber
        self.salary = salary

employeeList = []
employee1 = Employee("Banny Chu", "777-88-9999", 45000)
employee2 = Employee("Luffy Monkey", "555-66-9999", 32000)
employee3 = Employee("Zoro Nonoroa", "222-00-3333", 37000)
manager1 = Manager("Scalt Haight", "444-33-1111", 60000, "Lab", 2300)
manager2 = Manager("Kapu Ro", "333-44-2222", 65000, "General", 2600)
manager3 = Manager("Nami Swan", "111-77-6666", 80000, "HR", 3000)
employeeList.append(employee1)
employeeList.append(employee2)
employeeList.append(employee3)
employeeList.append(manager1)
employeeList.append(manager2)
employeeList.append(manager3)

print (sorted(employeeList, key=lambda employee: employee.name[1].lower()))

输出如下(奇怪的输出,因为我无法看到正确格式的employeeList,即使我键入print(employeeList)并给出了与下面相同的格式。在

^{pr2}$

我应该怎样修改它,以便我可以清楚地看到我的排序列表?在


Tags: nameself列表排序员工employeemanagersalary
3条回答

你错过了一点,sorted返回根据你发送的条件排序的列表的排列。它不会自动返回你排序的键,如果那是你所期待的?在

sort = sorted(employeeList, key=lambda employee: employee.name[1].lower())
print([emp.name.split()[1] for emp in employeeList])

输出(我很懒,只复制粘贴了3名员工):

^{pr2}$

您还缺少一个拆分,因为您将名称保存在一个字符串中。索引单个字符串将返回字符串中该位置的单个字符。在

如果您的目标不是只打印出姓氏,那么您必须重写__str__或{}方法。(请阅读here方法之间的确切区别。)

您忘记在键函数中拆分名称:employee.name.split(' ')[1]。 Python对排序后的列表调用__repr__,该列表在开头和结尾打印“[”和“]”,然后对每个列表元素调用__repr__。默认的__repr__打印对象类型和地址。如果您想看到其他东西,您必须给python另一个__repr__来调用。在

class Employee:
    def __init__(self, name, socialSecurityNumber, salary):
        """
        Set name, socialSecurityNumber, and salary to itself.
        """
        self.name = name
        self.socialSecurityNumber = socialSecurityNumber
        self.salary = salary

    def __repr__(self):
        return "{} {} {}".format(self.name, self.socialSecurityNumber, self.salary)

class Manager(Employee):
    def __init__(self, name, socialSecurityNumber, salary, department, unknown):
        super().__init__(name, socialSecurityNumber, salary)



employeeList = []
employee1 = Employee("Banny Chu", "777-88-9999", 45000)
employee2 = Employee("Luffy Monkey", "555-66-9999", 32000)
employee3 = Employee("Zoro Nonoroa", "222-00-3333", 37000)
manager1 = Manager("Scalt Haight", "444-33-1111", 60000, "Lab", 2300)
manager2 = Manager("Kapu Ro", "333-44-2222", 65000, "General", 2600)
manager3 = Manager("Nami Swan", "111-77-6666", 80000, "HR", 3000)
employeeList.append(employee1)
employeeList.append(employee2)
employeeList.append(employee3)
employeeList.append(manager1)
employeeList.append(manager2)
employeeList.append(manager3)

for employee in sorted(employeeList, key=lambda employee: employee.name.split(' ')[1].lower()):
    print(employee)

默认情况下,用户定义的对象将表示为内存中某个位置的类实例:

<__main__.Employee instance at 0x02A39940>

您需要在Employee类中添加用于对象表示的特殊方法:

^{pr2}$

相关问题 更多 >