Как создать подсписчик экземпляров класса, удовлетворяющих некоторому условию их значений атрибутов, начиная с полного списка экземпляров класса?Создайте список экземпляров классов, удовлетворяющих некоторому условию их значений (ов) атрибутов
Например, у меня есть список экземпляров моего класса Person(). Эти люди имеют много атрибутов, среди которых идентификатор, уникальный идентификатор и HH_ID, идентификатор домашнего хозяйства, в котором они живут. Я хочу связать всех лиц, живущих в одном доме, и, следовательно, иметь тот же HH_ID. Под «connect» я подразумеваю создание края между всеми членами домохозяйства, используя networkx
. Для этого мне нужно идентифицировать этих людей и поместить их в «подсписку», чтобы обработать какой-то алгоритм, чтобы соединить их все вместе. Как я могу это достичь?
Мне также нужен общий инструмент для других более сложных целей (например, случайное подключение N лиц в возрасте от 15 до 20 лет), но в самом простом случае членов домохозяйства я могу использовать тот факт, что мой список упорядоченный по ID и HH_ID, поэтому у меня есть что-то вроде:
ID HH_ID
0 0
1 0
2 0
3 1
4 1
5 2
где первое домашнее хозяйство состоит из лиц [0,1,2], второй из лиц [3,4] и так далее ...
Для этой домашней проблемы я попытался использовать рецепт итератора pairwise
(itertools documentation следующим образом:
import pairwise
i = pairwise(personList)
for p in personList:
toConnectList = [p]
p1,p2 = i.next()
while p1.hh_id == p2_hh_id
toConnectList.append(p2)
p1,p2 = i.next()
# connect all persons in toConnectList
Но очевидно, что это не работает, так как мой итератор i
спускается до hh_id
двух смежных лиц не совпадают, и перезапускается оттуда для следующего человека. Например. для лиц, приведенных в примере выше, мой итератор начнет сравнивать людей 2 и 3, когда дело доходит до человека 1 в цикле for
, в то время как мне нужно будет каким-то образом перейти непосредственно к человеку 3 в цикле for и запустить мой итератор сравнивая человека 3 и 4. Надеюсь, что этот пример немного прояснится, даже если он не выглядит очень ясным ...
В общем, мне нужен способ создания подсписного списка лиц, удовлетворяющих некоторым условиям по их атрибуту значения, возможно, является эффективным способом (у меня есть около 150 тысяч человек)
Спасибо, эта группа сначала была не очень понятна, но это именно то, что я искал! – Wilco