Уведомления

Группа в Telegram: @pythonsu

#1 Июль 5, 2015 14:09:35

MiK
Зарегистрирован: 2014-10-30
Сообщения: 191
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как проверить наличие словаря в кортеже?

У меня такие результаты:

>>> 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 на чистом си написана, насколько я слышал, поэтому и результаты по времени испольнения хорошие.

Офлайн

#2 Июль 5, 2015 15:09:49

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Как проверить наличие словаря в кортеже?

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.

Офлайн

#3 Июль 5, 2015 16:31:17

MiK
Зарегистрирован: 2014-10-30
Сообщения: 191
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как проверить наличие словаря в кортеже?

Shaman
Если так, то да, вполне возможно.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version