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

标签 python list search

我的问题类似于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/

相关文章:

python - 从另一个列表中删除一个列表中的所有值?

java - 从头开始创建数组列表

python - 如何获取元组列表中的第一个元素?

php - 如何防止搜索表单中的XSS?

c# - 在 C# 中的动态对象列表中搜索值

python - 如何运行以张量为范围的循环? (在 tensorflow 中)

python - 通过fft查找wav文件的频率幅度和相位

javascript - 检查数组中是否存在具有特定属性的对象

python - 在 Django 站点中将 HTML 渲染为 PDF

python - 超像素分割问题(​​python 中的 opencv) - 分割掩码轮廓中的孔洞