내 함수가 끝날 때 내 세트가 비어 있으면 부울 값을 반환하는 더 깨끗한 방법을 찾기 위해 고군분투하고 있습니다.
두 세트의 교차점을 가져 와서 반환 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
부울 값을 추론 할 빈 세트로. 지금까지 내가 생각 해낼 수있는 유일한 것은 c가 아닌 반환입니다.
>>> not not c
False
>>> not c
True
나는 그것을 찾기 위해 고군분투하고 있기 때문에 이것을 수행하는 훨씬 더 비단뱀적인 방법이 있다고 느낍니다. 값이 필요하지 않기 때문에 실제 집합을 if 문으로 반환하고 싶지 않고 교차하는지 알고 싶습니다.
답변
def myfunc(a,b):
c = a.intersection(b)
return bool(c)
bool()
와 비슷 not not
하지만 더 이데 오적이고 명확합니다.
답변
다른 답변만큼 비단뱀 적이지는 않지만 수학 :
return len(c) == 0
일부 의견 len(set)
은 복잡성에 미치는 영향에 대해 궁금해했습니다 . 세트의 사용을 추적하는 변수에 의존한다는 점에서 소스 코드 에서 볼 수 있듯이 O (1) 입니다.
static Py_ssize_t
set_len(PyObject *so)
{
return ((PySetObject *)so)->used;
}
답변
return True
빈 세트 를 원한다면 다음을 수행하는 것이 더 명확 할 것이라고 생각합니다.
return c == set()
즉 ” c
는 빈 set
” 과 같습니다 .
(또는 반대로, return c != set()
).
제 생각에는 이것은 False
부울 컨텍스트에서 와 같이 빈 집합에 대한 Python의 해석에 의존하는 것보다 더 명시 적입니다 (관용적이지는 않지만) .
답변
경우 c
집합입니다 당신은 그것을 수행하여 비어 있는지 여부를 확인할 수 있습니다 return not c
.
경우 c
비어있는 다음 not c
될 것입니다 True
.
그렇지 않으면 c
요소 not c
가 있으면 False
.
답변
네가 얘기 할 때:
c is not None
실제로 c와 None이 동일한 객체를 참조하는지 확인하고 있습니다. 이것이 “is”연산자가하는 일입니다. 파이썬에서 None은 일반적으로 사용 가능한 값이 없음을 의미하는 특별한 null 값입니다. c 또는 java에서 null과 비슷합니다. 파이썬은 내부적으로 “is”연산자를 사용하여 하나의 None 값만 할당하여 어떤 것이 None (null 생각)이 작동하는지 확인하기 때문에 인기있는 스타일이되었습니다. 그러나 이것은 집합 c의 진리 값과 관련이있을 필요가 없으며, c가 실제로 null 값이 아닌 집합인지 확인합니다.
조건문에서 집합이 비어 있는지 확인하려면 컨텍스트에서 부울로 캐스팅되므로 다음과 같이 말할 수 있습니다.
c = set()
if c:
print "it has stuff in it"
else:
print "it is empty"
그러나 부울로 변환하여 저장하려면 간단히 다음과 같이 말할 수 있습니다.
c = set()
c_has_stuff_in_it = bool(c)
답변
"""
This function check if set is empty or not.
>>> c = set([])
>>> set_is_empty(c)
True
:param some_set: set to check if he empty or not.
:return True if empty, False otherwise.
"""
def set_is_empty(some_set):
return some_set == set()
답변
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