Сравниваем нейросетки на Python-задачах. Раунд 4
🤠Сегодня решил скормить нейросеткам задачу, которую иногда даю начинающим студентам, чтобы поломали голову над неочевидной концепцией.
Есть структура данных, которая содержит визиты по городам:
geo_logs = [
{'visit1': ['Москва', 'Россия']},
{'visit2': ['Дели', 'Индия']},
{'visit3': ['Владимир', 'Россия']},
{'visit4': ['Лиссабон', 'Португалия']},
{'visit5': ['Париж', 'Франция']},
{'visit7': ['Тула', 'Россия']},
{'visit9': ['Курск', 'Россия']},
{'visit10': ['Архангельск', 'Россия']}]
Необходимо её отфильтровать, чтобы остались только визиты в города России. Самый типовой подход, который приводит к проблеме – удаление элементов из списка по условию прямо во время итерации по нему:
for log in geo_logs:
__for el in log.values():
____if 'Россия' not in el:
______geo_logs.remove(log)
print(geo_logs)
🤖Нашли ли ли нейросетки проблемы в таком подходе? Как его оптимизируют?
Варианты оказались разнообразными👇🏻
🔸GPT3.5 и Claude Instant решили задачу через создание нового списка и наполнение его через обратное условие, но при этом оставили вложенный цикл. Неоптимально, но верно.
Claude+ предложила два способа именно изменение исходного объекта (через создании копии и через reverse), но также от вложенного цикла не отказалась.
Этим троим по баллу.
🔸GPT4 корректно создала новый список через list comprehension. Bing также использовал list comprehension, но при этом добавив проверку на наличие строки в любых значениях словаря (это не требовалось по условию, но пусть будет). Такие варианты наиболее лаконичные. Им 2 балла.
🔸Bard использовал filter, но забыл достать из values-объекта списки, в которых и надо делать проверку на вхождение, поэтому результат получился некорректный. А Sage использовал list comrehension, но напрямую индексировал values-объект, что приведёт к ошибке. Подобные ошибки допустили ещё парочка моделей.
👉🏻Все ответы моделей тут.
📊 Промежуточные результаты после 4 раундов:
🥇 Bing, GPT4 – 6;
🥈 Bard, GPT3.5 – 4
🥉 Claude Instant, Sage – 3;
😗 Claude+ – 2;
😗 Koala – 1;
💩 Остальные по нулям.
🙄Уже все становится более-менее очевидным, никаких неожиданных результатов. После следующего раунда, если не будет каких-то открытий в целом можно подводить окончательные итоги.