Сегодня мы продолжим «KiwiJuiceEasy». Есть много способов решить эту проблему, но я покажу вам два похожих способа и один СОВЕТ по Python. (Я полагаю, вы думали об этой практической задаче для решения.)
Problem Statement Taro has prepared delicious kiwi fruit juice. He poured it into N bottles numbered from 0 to N-1. The capacity of the i-th bottle is capacities[i] liters, and he poured bottles[i] liters of kiwi juice into this bottle. Now he wants to redistribute juice in the bottles. In order to do this, he will perform M operations numbered from 0 to M-1 in the order in which he will perform them. For the i-th operation, he will pour kiwi juice from bottle fromId[i] to bottle toId[i]. He will stop pouring when bottle fromId[i] becomes empty or bottle toId[i] becomes full, whichever happens earlier. Return an that contains exactly N elements and whose i-th element is the amount of kiwi juice in the i-th bottle after all pouring operations are finished.
- Редактор: вы можете изменить язык
- После написания кода скомпилируйте и протестируйте. Затем вы можете проверить результат перед отправкой.
- + Скомпилировать 👉 Отправить 👉 Запустить системные тесты
Код
Я думаю, что чтение чужого кода помогает мне развиваться самому. Если вы думаете обо мне, вы прочитали два кода выше и подумали, что код сравнивается с вашим кодом.
СОВЕТ ПИТОНА
Этот совет взят из книги EFFECTIVE PYTHON. (Пункт 11: Используйте zip для параллельной обработки итераторов). В нашей практике проблемы fromId и toId связаны.
for i in range(len(fromId)): juice_sum = bottles[fromId[i]] + battles[toId[i]] ...
Проблема этого кода в том, что весь этот оператор цикла визуально зашумлен. (ЭФФЕКТИВНЫЙ ПИТОН — Бретт Слаткин)
for f,t in zip(fromId, toId): juice_sum = bottles[f] + battles[t] ...
Функция Zip заставляет итератор агрегировать элементы из каждого из итерируемых объектов. (Подробнее) У этой функции есть две проблемы. Во-первых, в python2zip не является генератором, поэтому он может использовать много памяти и привести к сбою вашей программы (но мы использовали python3). Во-вторых, когда входные итераторы имеют разную длину, возникает проблема. Если вы не уверены в длине списков, рассмотрите возможность использования функции zip_longest из встроенного модуля itertools.
Следующая практическая задача — это «Интересная вечеринка». Давайте устроим вечеринку!
источник
Бретт Слаткин, EFFECTIVE PYTHON: 59 особых способов писать на Python лучше.