Возврат boolean, если set пуст

Я изо всех сил пытаюсь найти более чистый способ возврата логического значения, если мой набор пуст в конце моей функции

Я беру пересечение двух наборов и хочу вернуть True или False на основании того, является ли результирующий набор пустым.

 def myfunc(a,b): c = a.intersection(b) #...return boolean here 

Моя первоначальная мысль состояла в том, чтобы сделать

 return c is not None 

Однако в моем интерпретаторе я могу легко увидеть, что оператор вернет true, если c = set([])

 >>> c = set([]) >>> c is not None True 

Я также пробовал все следующие:

 >>> c == None False >>> c == False False >>> c is None False 

Теперь я прочитал из документации, которую я могу использовать, and , or , а not с пустыми наборами, вывести логическое значение. Пока что единственное, что я могу придумать, это возвращение не с

 >>> not not c False >>> not c True 

У меня есть чувство, что есть намного более питонический способ сделать это, я изо всех сил пытаюсь его найти. Я не хочу возвращать фактический набор в оператор if, потому что мне не нужны значения, я просто хочу знать, пересекаются ли они.

6 Solutions collect form web for “Возврат boolean, если set пуст”

 def myfunc(a,b): c = a.intersection(b) return bool(c) 

bool() будет делать что-то похожее, not not более, но более идеоматично и ясно.

не как пифонические, как другие ответы, а математика:

 return len(c) == 0 

Если вы хотите return True для пустого набора, то я думаю, что было бы более понятным:

 return c == set() 

т.е. « c равно пустому set ».

(Или, наоборот, return c != set() ).

На мой взгляд, это более явное (хотя и менее идиоматическое), чем полагающееся на интерпретацию Python пустого множества как False в булевом контексте.

Если c – это набор, вы можете проверить, пусто ли он: return not c .

Если c пуст, то not c не будет True .

В противном случае, если c содержит любые элементы, not c не будет False .

Когда ты говоришь:

 c is not None 

Вы фактически проверяете, если c и None ссылаются на один и тот же объект. Это то, что делает оператор «есть». В python None – это специальное значение null, которое обычно означает, что у вас нет доступного значения. Сорта вроде null в c или java. Поскольку python внутренне присваивает только одно значение None, используя оператор «is», чтобы проверить, работает ли что-то None (think null), и стал популярным. Однако это не связано с истинным значением множества c, он проверяет, что c фактически является множеством, а не нулевым значением.

Если вы хотите проверить, является ли набор пустым в условном выражении, он приводится в виде булева в контексте, поэтому вы можете просто сказать:

 c = set() if c: print "it has stuff in it" else: print "it is empty" 

Но если вы хотите, чтобы он был преобразован в логическое значение, которое нужно сохранить, вы можете просто сказать:

 c = set() c_has_stuff_in_it = bool(c) 

Не так чисто, как bool (c), но это был повод использовать тройной.

 def myfunc(a,b): return True if a.intersection(b) else False 

Также, используя бит одной и той же логики, нет необходимости назначать c, если вы не используете его для чего-то другого.

 def myfunc(a,b): return bool(a.intersection(b)) 

Наконец, я бы предположил, что вы хотите значение True / False, потому что вы собираетесь выполнить с ним некоторый булевский тест. Я бы рекомендовал пропустить накладные расходы на вызов функции и определение, просто проверив, где вам это нужно.

Вместо:

 if (myfunc(a,b)): # Do something 

Может быть, это:

 if a.intersection(b): # Do something 
  • Вставьте список в индекс, который находится далеко за пределами диапазона - ведет себя как добавление
  • Дескриптор HOG с использованием Python + OpenCV
  • Применение прописных букв к столбцу в кадре данных pandas
  • Можно ли векторизовать эту функцию python?
  • создание парафразов английского текста с использованием PPDB
  • Pip не может обновить встроенный пакет в ubuntu 15.04
  • как получить общее количество часов и минут для timedelta в python
  • Можете ли вы создать список Python из строки, одновременно сохраняя символы в определенных ключевых словах?
  •  
    Interesting Posts for Van-Lav

    Есть ли способ ненасильственно остановить конкретную задачу работника сельдерея?

    Python. Является ли словарь медленным, чтобы найти частоту каждого символа?

    Проблемы с размещением нескольких сайтов django (перекрестные настройки)

    Python: может ли unittest отображать ожидаемые и фактические значения?

    sklearn LogisticRegression и изменение порога по умолчанию для классификации

    Что скачать, чтобы сделать работу nltk.tokenize.word_tokenize?

    Python optparse и пробелы в аргументе

    Почему я не могу добавить произвольных членов в экземпляры объектов?

    rauth2 Decoder не смог обработать access_token, когда я пытался подключиться к API Box.com

    как получить доступ к веб-камере, которая была обозначена символом udev в opencv

    Самый быстрый способ удалить первую и последнюю строки из строки Python

    Непоследовательное использование вкладок и пробелов в отступе

    Django: Не удается разрешить ключевое слово '' в поле. Возможные варианты:

    Не удается установить ggplot с anaconda

    Результат по модулю Python отличается от wolfram alpha?

    Python - лучший язык программирования в мире.