下面是一个示例代码,用于按照一个属性相交多个列表:
def intersect_lists(lists, attribute):
intersection = set(lists[0]) # 将第一个列表转换为集合作为初始交集
for lst in lists[1:]:
intersection &= set(lst) # 依次取交集
return [item for item in lists[0] if getattr(item, attribute) in intersection]
# 创建一个包含对象的列表
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
list1 = [Person("Alice", 25), Person("Bob", 30), Person("Charlie", 35)]
list2 = [Person("Bob", 30), Person("David", 40)]
list3 = [Person("Charlie", 35), Person("Eve", 45)]
result = intersect_lists([list1, list2, list3], "name")
for item in result:
print(item.name, item.age)
这个示例代码中,intersect_lists
函数接受一个包含多个列表和一个属性名的参数。它将第一个列表转换为集合作为初始交集,然后依次取每个列表与当前交集的交集。最后,使用getattr
函数获取对象的属性值,并根据交集筛选出符合条件的对象。在示例中,我们使用了一个Person
类来表示人员,根据姓名进行属性相交操作。输出结果为所有具有相同姓名的人员信息。