Мой вариант использования - у меня есть список вещей (скажем, оригинальные записи) и список обновленных вещей (обновленные записи). Для любых совершенно новых вещей в обновленном списке я хочу выполнить действие (скажем, отправить уведомление по электронной почте). Для любых вещей в исходном списке, которых больше нет в обновленном списке, я хочу выполнить другое действие (например, записать в журнал старую / устаревшую запись). Для любых вещей в исходном списке, которые также все еще находятся в обновленном списке, никаких действий не требуется. Равенство определяется стоимостью.
Подробно:
for updated_record in updated_records:
if updated_record not it original_records:
send_notification_email_for(updated_record)
for original_record in original_records:
if original_record not in updated_records:
log_outdated(original_record)
Мне кажется, что производственный код очень удобен для чтения:
removed_records = set(original_records).difference(updated_records)
new_records = set(updated_records).difference(original_records)
log_outdated(removed_records)
send_notification_email_for(new_records)
Обратите внимание на log_outdated и send_nofitication_email функциям также необходимо будет снова выполнить l oop через отфильтрованные коллекции selected_records и new_records.
Однако каждый список (исходный и обновленный) может содержать много тысяч записей, поэтому мне интересно, если У кого-нибудь есть предложения по более эффективным версиям того же лога c?