gpt4 book ai didi

python - 从多个列表创建唯一的对象列表

转载 作者:太空狗 更新时间:2023-10-30 02:34:40 24 4
gpt4 key购买 nike

我定义了一个包含多个字段的自定义对象。

例如,假设我有一个 Student 对象,它包含姓名、ID 和年龄。为了比较两个学生并确定他们是否是同一个学生,我实现了一个 __ eq__ 方法,该方法将返回两个学生的年龄、姓名和 ID 是否匹配。

def __eq__(self, other):   return self.name == other.name and self.ID == other.ID and self.age == other.age

请记住,学生只是一个示例,因此未考虑学生 ID 往往是唯一的这一事实。

假设我有以下注册列表,其中包含任意数量的 Student 对象

[S1, S2, S3][S2, S3][S3, S5, S4][S1, S4, S2, S1]

我想创建一些包含以下元素的数据结构

S1, S2, S3, S4, S5

最简单的方法是初始化一些可以容纳很多东西的数据结构,抓取一个项目,检查它是否存在于结构中,如果不存在则添加它。

new_list = some_new_list for each list of students:  for each student in the list:     check if the student is in new_list     #decide what to do 

如果我决定将其实现为一个简单的列表,那么随着我的列表不断增长,我可能会进行大量比较,尤其是当我的学生和注册列表数量多得离谱时。

实现它的有效方法是什么?两者都用于比较两个对象,然后使用该比较方法生成一组唯一的对象。

编辑:所以我尝试了一个简单的集合实现。

>>>a = Student("sample", 1234, 18)>>>b = Student("sample", 1234, 18)>>>students = set()>>>students.add(a)>>>b in studentsFalse>>>b == aTrue

我做错了什么吗?

最佳答案

from itertools import chain
myset = set(chain(iterable1, iterable2, iterable3, iterable4))

您获得了独特的项目,并且您只对每个可迭代对象进行了一次迭代。 chain 从一系列可迭代对象中生成一个长可迭代对象。如果您需要对其进行排序,sorted(myset) 将为您提供一个排序列表。

您的Student 类需要实现与其__eq__ 兼容的__hash__:

def __hash__(self):
return (self.name, self.ID, self.age).__hash__()

关于python - 从多个列表创建唯一的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031736/

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