想象我们的房屋数量有限。每个房子都有一个号码。每栋房子住一男一女。
我们为代表人士开设以下课程:
class Person:
def __init__(self, name, age, house_number):
self.name = name
self.age = age
self.house_number = house_number
我们有两个包含此类对象的列表,称为
men
和 women
。为了理解列表的结构,下面是向列表添加对象的示例。
men.append(Person("Alex", 22, 71))
认为列表已经填充了对象。因此,我们的
men
列表中包含所有男性,women
列表中包含所有女性。由于房屋数量有限,并且每栋房屋都有一男一女,因此列表的长度是相等的。两个列表中的对象都是随机的。
假设数据量非常大。
问题的目标是在
min_age
列表中找到所有超过一定年龄(变量 men
)的男性,并将他们每个人与 women
列表中与他住在同一所房子里的女性相匹配.
找到的所有男性必须在
men_new
列表中,女性必须在 women_new
列表中。这些列表必须具有可比性,因此住在同一所房子里的男性和女性在 men_new
和 women_new
列表中必须具有相同的索引。
我现在有以下解决方案:
# We believe that lists "men", "women" and variable "min_age" are previously defined.
men_new = []
women_new = []
for man in men:
if man.age > min_age:
men_new.append(man)
for man in men_new:
women_new.append(filter(lambda x: x.house_number == man.house_number, women)
这个解决方案效果很好,但是处理大量数据时速度非常慢。有什么方法可以更快地解决这个问题吗?预先感谢!
将您的女性列表转换为将门牌号映射到女性的字典:
house_to_woman = {}
for w in women:
house_to_woman[w.house_number] = w
然后您可以使用此映射使代码的最后一行变得高效:
for m in men_new:
women_new.append(house_to_woman[m.house_number])