Уведомления

Группа в Telegram: @pythonsu

#1 Июль 4, 2015 14:24:36

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

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

FishHook
Только я не понял: разве твоя функция не тоже самое делает?

Офлайн

#2 Июль 4, 2015 14:27:09

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

MiK
Ну ладно… Это уже не суть.
Как не суть? Ты предлагаешь крайне неэффективное решение. Из всех возможных вариантов ты выбрал наиболее неправильный. И называешь его эффективным. Да еще и я как бы его придумал. Я несколько негодую.



Офлайн

#3 Июль 4, 2015 14:28:30

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

MiK
Только я не понял: разве твоя функция не тоже самое делает?
Совершенно не то же самое.
Во-первых, моя функция не создает списка длинной в исходный кортеж.
Во вторых в моей функции цикл прерывается после получения результата.



Офлайн

#4 Июль 4, 2015 14:29:23

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

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

Ты только ругаешься, но никакой конструктивной критики не генерируешь.

if True in (isinstance(d, dict) for d in tup)
Так будет оптимально?

ПС: конструктивная критика появилась, беру свои слова обратно

Отредактировано MiK (Июль 4, 2015 14:31:15)

Офлайн

#5 Июль 4, 2015 14:35:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

MiK
Так будет оптимально?
Да блин же!


#!/usr/bin/env python
# -* coding: utf-8 -*-
tup = ({}, 1, 2, 3, 4)
c = 0
def f(d):
    global c
    c += 1
    print isinstance(d, dict)
    print c
print True in (f(d) for d in tup)

Сколько раз выполнилась функция проверки?



Офлайн

#6 Июль 4, 2015 14:43:37

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

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

FishHook
Может ты не заметил, но я заменил квадратные скобки на круглые.
Результат будет такой-же.
Да, согласен, это не так явно, как твоя функция - она более наглядна.

Отредактировано MiK (Июль 4, 2015 14:44:37)

Офлайн

#7 Июль 4, 2015 14:44:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

MiK
Может ты не заметил, но я заменил квадратные скобки на круглые.
Да хоть на треугольные, ты вопроса не понял или я мелким шрифтом пишу?
Давай еще раз


Сколько раз выполнилась функция проверки?



Офлайн

#8 Июль 4, 2015 14:50:41

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

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

def f(tup):
	c = 0
	a = (isinstance(d, dict) for d in tup)
	c += 1
	if next(a):
		print(c)
		return True

Ну сравни, если не веришь.

Офлайн

#9 Июль 4, 2015 14:52:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

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

MiK
Если способа проще нет, то этот пожалуй будет более-менее оптимальным:

>>> dict in map(type, ('g', '', 4, {3: 3}))
True
>>> dict in map(type, ('g', '', 4))
False
>>>



Офлайн

#10 Июль 4, 2015 14:53:20

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

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

py.user.next
Пожалуй этот способ самый нормальный - без огорода. Спасибо.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version