Каждому объекту из первого списка сопоставьте объект из второго списка по условию равенства значений атрибутов.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Каждому объекту из первого списка сопоставьте объект из второго списка по условию равенства значений атрибутов.

Сообщение Anonymous »


Представьте, что у нас есть конечное число районов с конечным количеством домов в каждом из них. Каждый дом имеет номер, а дома в каждом районе нумеруются с 1. В каждом доме живут один мужчина и одна женщина.

У нас есть следующий класс для представителей:

класс Человек: def __init__(я, имя, возраст, район, номер дома): self.name = имя self.age = возраст self.district = район self.номер_дома = номер_дома И у нас есть два списка с объектами этого класса, которые называются men и women. Чтобы понять структуру списков, ниже приведен пример добавления объекта в список.

men.append(Person("Алекс", 22, "Район 7", 71)) Считается, что списки уже заполнены объектами. Итак, у нас есть все мужчины в списке men и все женщины в списке women. Поскольку имеется конечное число районов, конечное число домов в каждом из них и в каждом доме проживает один мужчина и одна женщина, то длины списков равны. Объекты в обоих списках рандомизированы.

Предполагается, что объем данных очень велик.

Цель задачи — найти всех мужчин старше определенного возраста (переменная min_age) в списке men и сопоставить каждого из них с женщиной из списка женщины перечисляют тех, кто живет с ним в одном доме.

Все найденные мужчины должны находиться в списке men_new, а женщины — в списке women_new. Списки должны быть сопоставимы, поэтому мужчина и женщина, живущие в одном доме, должны иметь одинаковый индекс в списках men_new и women_new.

Теперь у меня есть следующее решение:

# Мы считаем, что списки «мужчины», «женщины» и переменная «min_age» определены заранее. men_new = [] женщины_новый = [] для мужчины у мужчин: если man.age > min_age: men_new.append(мужчина) для мужчины в men_new: Women_new.append(filter(lambda x: x.district == man.district и x.house_number == man.house_number, женщины) Это решение отлично работает, но очень медленно при работе с большими объемами данных. Есть ли способы решить эту проблему быстрее? Заранее спасибо!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»