집합이 비어 있는 경우 부울 반환
함수 끝에 집합이 비어 있는 경우 부울 값을 반환하는 더 깨끗한 방법을 찾는 데 어려움을 겪고 있습니다.
나는 두 세트의 교차점을 택하고, 돌아오고 싶습니다.True또는False결과 집합이 비어 있는지 여부를 기준으로 합니다.
def myfunc(a,b):
c = a.intersection(b)
#...return boolean here
처음에 생각한 것은
return c is not None
하지만, 내 통역사에서 나는 그 진술이 진실로 돌아온다는 것을 쉽게 볼 수 있습니다.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 문으로 되돌리고 싶지 않습니다. 단지 값이 교차하는지 알고 싶습니다.
다른 답들처럼 파이썬적이지는 않지만,
return len(c) == 0
어떤 댓글들은 그 영향에 대해 궁금해했기 때문에.len(set)복잡성에 영향을 미칠 수 있습니다.세트의 사용을 추적하는 변수에 의존하는 경우 소스 코드에 표시된 O(1)입니다.
static Py_ssize_t
set_len(PyObject *so)
{
return ((PySetObject *)so)->used;
}
def myfunc(a,b):
c = a.intersection(b)
return bool(c)
bool() 와 비슷한 일을 할 것입니다.not not하지만 더 관념적이고 명확합니다.
원하신다면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 값입니다.c 또는 java에서 null과 같이 정렬합니다.python은 내부적으로 "is" 연산자를 사용하여 None 값을 하나만 할당하기 때문에 None(think null)인지 확인하는 것이 작동하며 인기 있는 스타일이 되었습니다.그러나 이것은 c 집합의 true 값과 관련이 없으며, c가 실제로 null 값이 아닌 set인지 확인하는 것입니다.
조건문에서 집합이 비어 있는지 확인하려는 경우, 이 집합은 컨텍스트에서 부울로 캐스팅되므로 다음과 같이 말할 수 있습니다.
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)만큼 깨끗하지는 않지만, 그것은 3분의 1을 사용하기 위한 핑계였습니다.
def myfunc(a,b):
return True if a.intersection(b) else False
또한 약간의 동일한 논리를 사용하면 다른 용도로 사용하지 않는 한 c에 할당할 필요가 없습니다.
def myfunc(a,b):
return bool(a.intersection(b))
마지막으로 True/False 값을 사용하여 부울 테스트를 수행할 것이기 때문에 True/False 값을 원하는 것으로 가정합니다.필요한 곳을 테스트하는 것만으로 함수 호출과 정의의 오버헤드를 건너뛸 것을 권장합니다.
다음 대신:
if (myfunc(a,b)):
# Do something
아마도 이것:
if a.intersection(b):
# Do something
언급URL : https://stackoverflow.com/questions/21191259/returning-boolean-if-set-is-empty
'programing' 카테고리의 다른 글
| Angular 4+에서 보류 중인 모든 HTTP 요청을 취소/구독 해제하는 방법 (0) | 2023.08.25 |
|---|---|
| Ajax와 함께 작동하는 Adsense를 위한 솔루션이 절실히 필요합니다. (0) | 2023.08.25 |
| 다중 선택 상자에서 선택한 모든 값을 가져오는 방법은 무엇입니까? (0) | 2023.08.25 |
| jQuery를 사용하여 종료 날짜가 시작 날짜보다 큰지 확인 (0) | 2023.08.25 |
| Swift에서 배경을 흐리게 하는 방법이 있습니까?UI? (0) | 2023.08.25 |