Created
February 16, 2019 12:25
-
-
Save rupython/6a1a9c3cd25dca076e2c84d1487bc74a to your computer and use it in GitHub Desktop.
From: Лев
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Программирование на языке высокого уровня (Python). | |
| # https://www.yuripetrov.ru/edu/python | |
| # Задание task_06_02_10. | |
| # | |
| # Выполнил: Фамилия И.О. | |
| # Группа: !!! | |
| # E-mail: !!! | |
| import random | |
| import time | |
| def timeit(func, *args, **kw): | |
| """Выполнить функицю 'func' с параметрами '*args', '**kw' и | |
| вернуть время выполнения в мс.""" | |
| time_start = time.time() | |
| res = func(*args, **kw) | |
| time_end = time.time() | |
| return (time_end - time_start) * 1000.0, res | |
| def top3_1(db): | |
| """Вернуть список из ТОП-3 клиентов по сумме активов. | |
| Алгоритм: | |
| Сортировка (встроенный метод sort()) и возврат 3-х элементов. | |
| Сложность: !!!. | |
| Параметры: | |
| - db (list of dict): список клиентов. | |
| Результат: | |
| tuple of dict: 3 клиента с максимальной суммой активов.""" | |
| db = [i for i in sorted(db, key=lambda i: i["assets"], reverse=True)] | |
| return tuple(db[0:3]) | |
| def top3_2(db): | |
| """Вернуть список из ТОП-3 клиентов по сумме активов. | |
| Алгоритм: | |
| Прямой перебор (1 проход в цикле). | |
| Сложность: !!!. | |
| Параметры: | |
| - db (list of dict): список клиентов. | |
| Результат: | |
| tuple of dict: 3 клиента с максимальной суммой активов.""" | |
| # Удалите комментарий и допишите код | |
| if __name__ == "__main__": | |
| print("Загрузка базы данных... ") | |
| GEN_LIMIT = 1000000 | |
| # Список клиентов | |
| db = [] | |
| for client_id, assets in enumerate( | |
| random.sample(range(0, 10 * GEN_LIMIT), GEN_LIMIT), | |
| start=1): | |
| db.append(dict(client_id=client_id, assets=assets)) | |
| print("Загружено записей: {:,}.\n\nПримеры:".format(GEN_LIMIT)) | |
| print("Первый элемент:", db[0]) | |
| print("Последний элемент:", db[-1]) | |
| print("\n") | |
| res1 = timeit(top3_1, db) | |
| res2 = timeit(top3_2, db) | |
| for i, (func_time, res) in enumerate((res1, res2), start=1): | |
| print("Способ №{}".format(i)) | |
| print("Время: {:.2f} мс.".format(func_time)) | |
| for j, client in enumerate(res, start=1): | |
| print("{}-е место: ID={client_id} Активы={assets:,} руб.". | |
| format(j, **client)) | |
| print() | |
| # ------------- | |
| # Пример вывода: | |
| # | |
| # Загрузка базы данных... | |
| # Загружено записей: 10,000,000. | |
| # | |
| # Примеры: | |
| # Первый элемент: {'client_id': 1, 'assets': 79149360} | |
| # Последний элемент: {'client_id': 10000000, 'assets': 92745004} | |
| # | |
| # | |
| # Способ №1 | |
| # Время: 16779.14 мс. | |
| # 1-е место: ID=1346588 Активы=99,999,995 руб. | |
| # 2-е место: ID=9924557 Активы=99,999,979 руб. | |
| # 3-е место: ID=2904705 Активы=99,999,967 руб. | |
| # | |
| # Способ №2 | |
| # Время: 4364.90 мс. | |
| # 1-е место: ID=1346588 Активы=99,999,995 руб. | |
| # 2-е место: ID=9924557 Активы=99,999,979 руб. | |
| # 3-е место: ID=2904705 Активы=99,999,967 руб. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment