gpt4 book ai didi

python - 根据公共(public)属性对两个对象列表进行排序

转载 作者:行者123 更新时间:2023-12-05 05:32:34 26 4
gpt4 key购买 nike

我的问题类似于this one几年前发布的,但我还有一件事我不知道该怎么做。假设我有两个列表,每个列表包含一组对象。这些对象共享一个共同属性:

class Student:
def __init__(self, value) -> None:
self.value = value
class School:
def __init__(self, value) -> None:
self.value = value
self.students = []


Student_List = [Student(1), Student(1), Student(3), Student(3), Student(5)]
School_List = [School(5), School(2), School(1), School(3), School(4)]

我的目标是搜索具有匹配值的对象,然后对列表中保存的对象执行操作。我目前的方法如下:

for student in Student_List:
for school in School_List:
if student.value == school.value:
school.students.append(student)
break

这显然效率很低,找到路口会容易得多。但是,请注意我是如何通过将 Student 对象附加到 School 的列表来更改 School 的属性的。

最佳答案

您可以创建一个反向映射,将每个学校值映射到相应的学校对象,这样您就可以遍历学生列表,并通过值映射高效地获取匹配的学校对象,将学生对象附加到:

schools = {school.value: school for school in School_List}
for student in Student_List:
schools[student.value].students.append(student)

通过这种方法,您可以将时间复杂度从 O(n ^ 2) 降低到 O(n)

演示:https://replit.com/@blhsing/ImpracticalSimultaneousLock

关于python - 根据公共(public)属性对两个对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74049384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com