Найти - Пользователи
Полная версия: Как проверить наличие словаря в кортеже?
Начало » Python для новичков » Как проверить наличие словаря в кортеже?
1 2 3 4
MiK
У меня такие результаты:

>>> print(timeit.timeit('True in [isinstance(d, dict) for d in a]', 'a = [0] * 10 + [{}]'))
10.806834036965029
>>> print(timeit.timeit('dict in map(type, a)', 'a = [0] * 10 + [{}]'))
2.8347205790801127
>>> print(timeit.timeit('dict_in_tuple(a)', '''
def dict_in_tuple(tpl):
    for i in tpl:
        if isinstance(i, dict):
            return True
    return False
a = [0] * 10 + [{}]'''))
7.836950581622432

функция map на чистом си написана, насколько я слышал, поэтому и результаты по времени испольнения хорошие.
Shaman
MiK
функция map на чистом си написана, насколько я слышал, поэтому и результаты по времени испольнения хорошие.
Я тоже об этом давно слышал и проверил:
import timeit
print(timeit.timeit('True in (isinstance(d, dict) for d in a)', 'a = [0] * 100 + [{}]'))
print(timeit.timeit('dict in (type(d) for d in a)', 'a = [0] * 100 + [{}]'))  # !!!!!!!!!!!!!!!!
print(timeit.timeit('dict_in_tuple(a)', '''
def dict_in_tuple(tpl):
    for i in tpl:
        if type(i) == dict:  # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            return True
    return False
a = [0] * 100 + [{}]'''))
51.6623192855579
23.122650626727598
23.906970548591914
У CPython проблема скорее с isinstance.
MiK
Shaman
Если так, то да, вполне возможно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB