Есть список, кортеж, словарь, множество генерируемые рандомно функцией get_random_hash
Есть 3 списка for_check1, for_check2, for_check3. тоже рандомные.
Проверить на вхождение элементов списка, кортежа, словаря, множества в for_check1, for_check2, for_check3.
Измерить время проверки и записать в _time1, _time2, _time3
Вывести время для каждой проверки в виде понятном для человека таблице
Как лучше реализовать все это?
Дан базовый профайлер из старой задачи.
Пока есть только вот такие наброски кода:
import time import random class Profiler: """Базовый профайлер, для реализации задачи потребует переработки""" def __init__(self, message_format='{:.3f} sec'): self._message_format = message_format def __enter__(self,): self._startTime = time.time() def __exit__(self, rtype, value, traceback): print(self._message_format.format(time.time() - self._startTime)) class Result: def __init__(self, name): self.name = name self._time1 = None self._time2 = None self._time3 = None def get_random_hash(chars: str='ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789', length: int=8) -> str: """ Функция генерации случайного значения ARGUMENTS: :param chars: строка для формирования уникальной строки :param length: длинна генерируемого выходного значения """ return ''.join(random.choice(chars) for letter in range(length)) BASE_LEN = 10000 CHECK_LEN = BASE_LEN * 10 base = [get_random_hash(length=5) for x in range(BASE_LEN)] l = base[:] t = tuple(base) d = dict.fromkeys(base) s = set(base) for_check1 = [get_random_hash(length=4) for x in range(CHECK_LEN)] for_check2 = [get_random_hash(length=5) for x in range(CHECK_LEN)] for_check3 = base * (CHECK_LEN // BASE_LEN) results = [] ############################################################################ # List ############################################################################ result = Result('List') results.append(result) with Profiler(): for x in for_check1: if x in l: pass with Profiler(): for x in for_check2: if x in l: pass with Profiler(): for x in for_check3: if x in l: pass ############################################################################ # Tuple ############################################################################ result = Result('Tuple') results.append(result) with Profiler(): for x in for_check1: if x in t: pass with Profiler(): for x in for_check2: if x in t: pass with Profiler(): for x in for_check3: if x in t: pass ############################################################################ # Dict ############################################################################ result = Result('Dict') results.append(result) with Profiler(): for x in for_check1: if x in d.keys(): pass with Profiler(): for x in for_check2: if x in d.keys(): pass with Profiler(): for x in for_check3: if x in d.keys(): pass ############################################################################ # Set ############################################################################ result = Result('Set') results.append(result) with Profiler(): for x in for_check1: if x in s: pass with Profiler(): for x in for_check2: if x in s: pass with Profiler(): for x in for_check3: if x in s: pass ########################################################################### # TABLE ########################################################################### # Организовать таблицы в человекочитаемом виде, # воспользоваться для этого синтаксисом форматирования строк используемом в format # Вывод данных о времени(float) должен быть ограничен 3-мя знаками поле запятой # вывод заголовков таблицы for result in results: # вывод строк таблицы с результатами pass