Skip to content

Instantly share code, notes, and snippets.

@rupython
Created February 16, 2019 12:25
Show Gist options
  • Select an option

  • Save rupython/6a1a9c3cd25dca076e2c84d1487bc74a to your computer and use it in GitHub Desktop.

Select an option

Save rupython/6a1a9c3cd25dca076e2c84d1487bc74a to your computer and use it in GitHub Desktop.
From: Лев
# Программирование на языке высокого уровня (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