예를 들어 다음을 통과한 경우:
a = []
어떻게 있는지 확인합니까 a
비어?
질문자 :Ray
예를 들어 다음을 통과한 경우:
a = []
어떻게 있는지 확인합니까 a
비어?
if not a: print("List is empty")
빈 list
의 암시적 부울 을 사용하는 것은 매우 파이썬적입니다.
이를 수행하는 파이썬적인 방법은 PEP 8 스타일 가이드 에서 가져온 것입니다(여기서 Yes 는 "권장"을 의미하고 No 는 "권장하지 않음"을 의미함).
시퀀스(문자열, 목록, 튜플)의 경우 빈 시퀀스가 거짓이라는 사실을 사용합니다.
Yes: if not seq: if seq: No: if len(seq): if not len(seq):
나는 그것을 명시 적으로 선호합니다.
if len(li) == 0: print('the list is empty')
li
가 시퀀스(목록)이고 크기를 테스트하려는 것이 100% 명확해집니다. if not li: ...
내 문제 li
가 부울 변수라는 잘못된 인상을 준다는 것입니다.
이것은 "python test empty array" 및 유사한 쿼리에 대한 첫 번째 Google 조회이며 다른 사람들이 단순한 목록을 넘어 질문을 일반화하는 것 같아서 많은 사람들이 사용할 수 있습니다.
NumPy 배열에 대해 주의해야 합니다. list
또는 다른 표준 컨테이너에 대해 제대로 작동하는 다른 방법이 NumPy 배열에 대해 실패하기 때문입니다. 이유는 아래에서 설명하지만 간단히 말해 선호하는 방법 size
를 사용하는 것입니다.
"파이썬" 방식은 NumPy가 배열을 bool
배열로 캐스팅하려고 시도하고 if x
가 일종의 집계 진리값에 대해 bool
그러나 이것은 의미가 없으므로 ValueError
.
>>> x = numpy.array([0,1]) >>> if x: print("x") ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
그러나 적어도 위의 경우는 실패했음을 알려줍니다. 정확히 하나의 요소가 있는 NumPy 배열이 있는 if
오류가 발생하지 않는다는 의미에서 if 문이 "작동"합니다. 그러나 한 요소가 0
(또는 0.0
또는 False
, ...)인 경우 if
False
가 잘못됩니다.
>>> x = numpy.array([0,]) >>> if x: print("x") ... else: print("No x") No x
그러나 분명히 x
존재하며 비어 있지 않습니다! 이 결과는 원하는 것이 아닙니다.
len
을 사용하면 예기치 않은 결과가 발생할 수 있습니다.예를 들어,
len( numpy.zeros((1,0)) )
배열에 0개의 요소가 있어도 1을 반환합니다.
SciPy FAQ 에서 설명했듯이 NumPy 배열이 있다는 것을 알고 있는 모든 경우에 올바른 방법은 if x.size
.
>>> x = numpy.array([0,1]) >>> if x.size: print("x") x >>> x = numpy.array([0,]) >>> if x.size: print("x") ... else: print("No x") x >>> x = numpy.zeros((1,0)) >>> if x.size: print("x") ... else: print("No x") No x
list
, NumPy 배열인지 또는 다른 것인지 확실하지 않은 경우 이 접근 방식을 @dubiousjim이 제공하는 답변 과 결합하여 각 유형에 올바른 테스트가 사용되었는지 확인할 수 있습니다. 아주 "파이썬"은 아니지만 NumPy는 적어도 이런 의미에서 의도적으로 파이썬을 깨뜨렸습니다.
입력이 비어 있는지 확인하는 것 이상을 수행해야 하고 인덱싱 또는 수학 연산과 같은 다른 NumPy 기능을 사용하는 경우 입력 을 NumPy 배열로 강제하는 것이 더 효율적이고 확실히 더 일반적입니다. 이 작업을 빠르게 수행하기 위한 몇 가지 멋진 기능이 있습니다 numpy.asarray
입니다. 이것은 입력을 취하고, 이미 배열인 경우 아무 작업도 하지 않으며, 목록, 튜플 등인 경우 입력을 배열로 래핑하고 선택적으로 선택한 dtype
으로 변환합니다. 따라서 가능할 때마다 매우 빠르며 입력이 NumPy 배열이라고 가정할 수 있습니다. 배열로 변환해도 현재 범위를 벗어나지 않기 때문에 일반적으로 동일한 이름을 사용합니다.
x = numpy.asarray(x, dtype=numpy.double)
이렇게 하면 이 페이지에서 볼 수 있는 모든 경우에 x.size
목록이 비어 있는지 확인하는 가장 좋은 방법
예를 들어 다음을 통과한 경우:
a = []
비어 있는지 어떻게 확인합니까?
목록을 부울 컨텍스트에 배치합니다(예: if
또는 while
문 사용). 비어 있으면 False
를 테스트하고 그렇지 않으면 True
예를 들어:
if not a: # do this! print('a is an empty list')
Python 표준 라이브러리의 Python 코드에 대한 공식 Python 스타일 가이드인 PEP 8은 다음을 주장합니다.
시퀀스(문자열, 목록, 튜플)의 경우 빈 시퀀스가 거짓이라는 사실을 사용합니다.
Yes: if not seq: if seq: No: if len(seq): if not len(seq):
표준 라이브러리 코드는 가능한 한 성능이 좋고 정확해야 합니다. 하지만 그 이유는 무엇이며 이 지침이 필요한 이유는 무엇입니까?
저는 Python을 처음 접하는 숙련된 프로그래머에게서 다음과 같은 코드를 자주 봅니다.
if len(a) == 0: # Don't do this! print('a is an empty list')
그리고 게으른 언어 사용자는 다음과 같이 하고 싶을 수 있습니다.
if a == []: # Don't do this! print('a is an empty list')
이들은 각각의 다른 언어에서 정확합니다. 그리고 이것은 Python에서도 의미상 정확합니다.
그러나 파이썬은 부울 강제 변환을 통해 목록 객체의 인터페이스에서 직접 이러한 의미 체계를 지원하기 때문에 파이썬이 아닌 것으로 간주합니다.
문서에서 (특히 빈 목록 []
포함에 유의하십시오):
기본적으로 개체는 진정한 고려의 클래스 정의 중 하나를하지 않는 한
__bool__()
메소드가 반환하는False
또는__len__()
객체로 호출 할 때, 0을 리턴하는 것이 방법. 다음은 false로 간주되는 대부분의 내장 객체입니다.
- false로 정의된 상수:
None
및False
.- 모든 숫자 유형의
0
: 0 ,0.0
,0j
,Decimal(0)
,Fraction(0, 1)
- 빈 시퀀스 및 컬렉션:
''
,()
,[]
,{}
,set()
,range(0)
그리고 데이터 모델 문서:
진리값 테스트 및 내장 연산
bool()
을 구현하기 위해 호출됩니다.False
또는True
반환해야 합니다. 이 메서드가 정의되어 있지 않으면__len__()
이 호출되고 정의된 경우 객체가 호출되고 결과가 0이 아니면 객체가 true로 간주됩니다. 클래스가__len__()
또는__bool__()
정의하지 않으면 모든 해당 인스턴스가 true로 간주됩니다.
그리고
len()
을 구현하기 위해 호출됩니다. 객체의 길이를 반환해야 합니다(정수 >= 0). 또한__bool__()
메서드를__len__()
메서드가 0을 반환하는 객체는 부울 컨텍스트에서 false로 간주됩니다.
그래서 이것 대신:
if len(a) == 0: # Don't do this! print('a is an empty list')
아니면 이거:
if a == []: # Don't do this! print('a is an empty list')
이 작업을 수행:
if not a: print('a is an empty list')
그것은 돈을 지불합니까? (동등한 작업을 수행하는 데 걸리는 시간은 적을수록 좋습니다.)
>>> import timeit >>> min(timeit.repeat(lambda: len([]) == 0, repeat=100)) 0.13775854044661884 >>> min(timeit.repeat(lambda: [] == [], repeat=100)) 0.0984637276455409 >>> min(timeit.repeat(lambda: not [], repeat=100)) 0.07878462291455435
규모의 경우 다음은 함수를 호출하고 빈 목록을 생성하고 반환하는 비용입니다. 위에서 사용된 공허함 검사 비용에서 뺄 수 있습니다.
>>> min(timeit.repeat(lambda: [], repeat=100)) 0.07074015751817342
우리는 내장 기능 길이 중 검사 것을 알 len
에 비해 0
또는 빈 목록에 대해 확인이 훨씬 덜 확대됨에 설명 된대로 언어의 내장 구문을 사용하는 것보다.
왜요?
len(a) == 0
검사의 경우:
먼저 Python은 전역을 확인하여 len
이 음영 처리되었는지 확인해야 합니다.
그런 다음 함수를 호출하고 load 0
하고 Python에서 동등 비교를 수행해야 합니다(C 대신):
>>> import dis >>> dis.dis(lambda: len([]) == 0) 1 0 LOAD_GLOBAL 0 (len) 2 BUILD_LIST 0 4 CALL_FUNCTION 1 6 LOAD_CONST 1 (0) 8 COMPARE_OP 2 (==) 10 RETURN_VALUE
그리고 [] == []
경우 불필요한 목록을 작성한 다음 다시 Python의 가상 머신(C와 반대)에서 비교 작업을 수행해야 합니다.
>>> dis.dis(lambda: [] == []) 1 0 BUILD_LIST 0 2 BUILD_LIST 0 4 COMPARE_OP 2 (==) 6 RETURN_VALUE
"Pythonic" 방식은 목록의 길이가 객체 인스턴스 헤더에 캐시되기 때문에 훨씬 간단하고 빠른 검사입니다.
>>> dis.dis(lambda: not []) 1 0 BUILD_LIST 0 2 UNARY_NOT 4 RETURN_VALUE
ob_size
필드를 추가하는PyObject
의 확장입니다. 이것은 길이 개념이 있는 객체에만 사용됩니다. 이 유형은 Python/C API에 자주 나타나지 않습니다.PyObject_VAR_HEAD
매크로 확장으로 정의된 필드에 해당합니다.
Include/listobject.h 의 c 소스에서 :
typedef struct { PyObject_VAR_HEAD /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ PyObject **ob_item; /* ob_item contains space for 'allocated' elements. The number * currently in use is ob_size. * Invariants: * 0 <= ob_size <= allocated * len(list) == ob_size
l=[]
then%timeit len(l) != 0
90.6 ns ± 8.3 ns,%timeit l != []
55.6 ns와 같이 꽤 추하지만 비어 있지 않은 경우에도 마찬가지입니다. ± 3.09,%timeit not not l
38.5ns ± 0.372. 하지만 3배의 속도에도 불구하고not not l
사람이 즐길 수 있는 방법은 없습니다. 우스꽝스러워 보인다. 하지만 속도가 이긴다.
if l:
이 충분하지만 놀랍게도%timeit bool(l)
± 2.64ns를 산출하기 때문에 문제가 timeit으로 테스트하는 것이라고 가정합니다. 흥미롭게도 이 페널티 없이 bool을 강제할 방법이 없습니다.%timeit l
은 변환이 발생하지 않으므로 쓸모가 없습니다.
IPython 매직, %timeit
은 여기에서 완전히 쓸모가 없습니다.
In [1]: l = [] In [2]: %timeit l 20 ns ± 0.155 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each) In [3]: %timeit not l 24.4 ns ± 1.58 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) In [4]: %timeit not not l 30.1 ns ± 2.16 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
여기에 없는 각 추가에 대해 약간의 선형 비용이 있음을 not
우리는 비용 ceteris paribus , 즉 다른 모든 것이 같음을 보고 싶습니다. 여기서 다른 모든 것은 가능한 한 최소화됩니다.
In [5]: %timeit if l: pass 22.6 ns ± 0.963 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) In [6]: %timeit if not l: pass 24.4 ns ± 0.796 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) In [7]: %timeit if not not l: pass 23.4 ns ± 0.793 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
이제 비어 있지 않은 목록의 경우를 살펴보겠습니다.
In [8]: l = [1] In [9]: %timeit if l: pass 23.7 ns ± 1.06 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) In [10]: %timeit if not l: pass 23.6 ns ± 1.64 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) In [11]: %timeit if not not l: pass 26.3 ns ± 1 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
여기에서 볼 수 있는 것은 실제 bool
을 조건 검사에 전달하든 목록 자체에 전달하든 거의 차이가 없으며 목록을 있는 그대로 제공하는 것이 더 빠릅니다.
파이썬은 C로 작성되었습니다. C 수준에서 논리를 사용합니다. 파이썬으로 작성하는 모든 것은 더 느릴 것입니다. 그리고 Python에 직접 내장된 메커니즘을 사용하지 않는 한 훨씬 더 느려질 것입니다.
빈 목록 자체는 참값 테스트에서 거짓으로 간주됩니다( python 문서 참조).
a = [] if a: print "not empty"
@대런 토마스
편집: 빈 목록을 False로 테스트하는 것에 대한 또 다른 요점: 다형성은 어떻습니까? 목록이 목록이라는 것에 의존해서는 안 됩니다. 오리처럼 꽥꽥거려야 합니다. 요소가 없을 때 duckCollection이 ''False''로 꽥꽥 소리를 내도록 하려면 어떻게 해야 합니까?
당신의 duckCollection은 __nonzero__
또는 __len__
구현해야 if a:가 문제 없이 작동합니다.
Patrick의 (허용되는) 대답 은 옳습니다. if not a:
올바른 방법입니다. Harley Holcombe의 대답 은 이것이 PEP 8 스타일 가이드에 있다는 것입니다. 그러나 어떤 답변도 설명하지 않는 것은 관용구를 따르는 것이 좋은 생각인 이유입니다. 개인적으로 이것이 Ruby 사용자에게 충분히 명확하지 않거나 혼란스럽다고 생각하더라도 말입니다.
Python 코드와 Python 커뮤니티에는 매우 강력한 관용구가 있습니다. 이러한 관용구를 따르면 Python 경험이 있는 사람이라면 누구나 코드를 더 쉽게 읽을 수 있습니다. 그리고 이러한 관용구를 위반하면 강력한 신호입니다.
if not a:
None
, 숫자 0, 빈 튜플, 빈 사용자 생성 컬렉션 유형, 빈 사용자 생성 not-quite-collection 유형 또는 단일 요소 NumPy 배열과 빈 목록을 구별하지 않는 것은 사실입니다. 잘못된 값 등을 가진 스칼라로 작동합니다. 때로는 이에 대해 명시적으로 설명하는 것이 중요합니다. 그리고 그 경우에, 당신은 당신이 명시하고 싶은 것에 대해 알고 있으므로 정확히 그것을 테스트할 수 있습니다. 예를 들어 if not a and a is not None:
은 "None을 제외한 모든 거짓"을 의미하는 반면 if len(a) != 0:
은 "빈 시퀀스만 있으며 시퀀스 이외의 모든 것은 여기에서 오류입니다"를 의미합니다. . 테스트하려는 것을 정확히 테스트하는 것 외에도 이 테스트가 중요하다는 것을 독자에게 알립니다.
그러나 명시적으로 설명할 것이 없을 때 if not a:
이외의 다른 것은 독자를 오도하는 것입니다. 중요하지 않을 때 중요한 신호를 보내고 있습니다. (당신은 또한 코드가 덜 유연하고, 또는 느리게, 또는 무엇이든,하지만 모든 덜 중요합니다. 할 수있다) 그리고 당신은 습관적으로이 같은 독자를 오도 경우 구별을해야 할 때, 다음, 그것을 눈치 채지 때문에 통과 것 당신은 당신의 코드 전체에 걸쳐 "울고 있는 늑대"였습니다.
처음부터 목록을 테스트 해야 할 필요성에 대해 의문을 제기한 사람은 아무도 없는 것 같습니다. 추가 컨텍스트를 제공하지 않았기 때문에 처음에는 이 검사를 수행할 필요가 없지만 Python의 목록 처리에 익숙하지 않을 수 있다고 상상할 수 있습니다.
가장 파이썬적인 방법은 전혀 확인하지 않고 목록을 처리하는 것이라고 주장합니다. 그렇게하면 비어 있든 가득 차 있든 올바른 일을 할 것입니다.
a = [] for item in a: <do something with item> <rest of code>
이 공허함에 대한 특정 검사를 필요로하지 않는 동안, 어떤 내용을 처리하는 이점이있다. a 가 비어 있으면 종속 블록이 실행되지 않고 인터프리터는 다음 줄로 넘어갑니다.
배열이 비어 있는지 실제로 확인해야 하는 경우 다른 답변으로 충분합니다.
len()
은 Python 목록, 문자열, 사전 및 집합에 대한 O(1) 작업입니다. Python은 내부적으로 이러한 컨테이너의 요소 수를 추적합니다.
JavaScript 에는 truthy/falsy 와 유사한 개념이 있습니다.
나는 다음과 같이 썼다.
if isinstance(a, (list, some, other, types, i, accept)) and not a: do_stuff
-1로 투표되었습니다. 독자들이 전략에 반대했기 때문인지 아니면 제시된 답변이 도움이 되지 않는다고 생각했기 때문인지는 모르겠습니다. 나는 그것이 후자인 척 할 것입니다. 왜냐하면 --- "파이썬"으로 간주되는 것이 무엇이든 --- 이것이 올바른 전략입니다. 예를 들어, a
False
인 경우를 이미 배제했거나 처리할 준비가 되어 if not a:
보다 더 제한적인 테스트가 필요합니다. 다음과 같이 사용할 수 있습니다.
if isinstance(a, numpy.ndarray) and not a.size: do_stuff elif isinstance(a, collections.Sized) and not a: do_stuff
첫 번째 테스트는 위의 @Mike의 답변에 대한 응답입니다. 세 번째 줄은 다음과 같이 바꿀 수도 있습니다.
elif isinstance(a, (list, tuple)) and not a:
특정 유형(및 해당 하위 유형)의 인스턴스만 허용하거나 다음을 사용하려는 경우:
elif isinstance(a, (list, tuple)) and not len(a):
당신은 명시 적 유형 검사없이 멀리 얻을 수 있지만, 주변의 상황은 이미를 보장 경우에만 것을 a
당신이 핸들에 준비하고있는 유형의 값, 또는 당신은 당신이 처리 할 준비하지 않는 유형이 있는지 있다면 처리할 준비가 된 오류(예: 정의되지 않은 값에 대해 len
을 호출 TypeError
일반적으로 "파이썬" 규칙은 마지막으로 가는 것 같습니다. 오리처럼 쥐어짜고 꽥꽥거리는 방법을 모르는 경우 DuckError를 발생시키십시오. 당신은 여전히 대해 생각해야 어떤 종류의 가정 당신에게있는 거 결정하지만, 당신이 제대로 정말 처리 할 준비하지 않는 적절한 장소에서 오류하고자하는 경우 여부를 지정합니다. Numpy 배열은 맹목적으로 len
또는 boolean 유형 변환에 의존하는 것이 예상한 대로 정확하게 수행되지 않을 수 있는 좋은 예입니다.
진실 값 테스트에 대한 문서에서 :
여기에 나열된 값 이외의 모든 값은 True
None
False
0
예: 0 , 0.0
, 0j
.''
, ()
, []
.{}
__bool__()
또는 __len__()
메서드를 정의하는 경우 해당 메서드가 정수 0 또는 부울 값 False
반환할 때 사용자 정의 클래스의 인스턴스. 볼 수 있듯이 빈 목록 []
은 falsy 이므로 부울 값에 대해 수행할 작업이 가장 효율적으로 들립니다.
if not a: print('"a" is empty!')
나는 다음을 선호한다:
if a == []: print "The list is empty."
목록이 비어 있는지 확인할 수 있는 몇 가지 방법은 다음과 같습니다.
a = [] #the list
1) 아주 간단한 파이썬 방식:
if not a: print("a is empty")
Python에서 목록, 튜플, 집합, 사전, 변수 등과 같은 빈 컨테이너 False
로 표시됩니다. 단순히 목록을 술어로 취급할 수 있습니다( 부울 값 반환 ). True
값은 비어 있지 않음을 나타냅니다.
2) 훨씬 명시적인 방법: len()
을 사용하여 길이를 찾고 길이가 0
인지 확인합니다.
if len(a) == 0: print("a is empty")
3) 또는 익명의 빈 목록과 비교:
if a == []: print("a is empty")
4) 또 다른 어리석은 exception
와 iter()
사용하는 것입니다.
try: next(iter(a)) # list has elements except StopIteration: print("Error: a is empty")
방법 1(선호):
if not a : print ("Empty")
방법 2:
if len(a) == 0 : print( "Empty" )
방법 3:
if a == [] : print ("Empty")
이와 같이 bool()
사용해 볼 수도 있습니다. 비록 가독성이 떨어지지만 확실히 이것을 수행하는 간결한 방법입니다.
a = [1,2,3]; print bool(a); # it will return True a = []; print bool(a); # it will return False
나는 체크리스트가 비어있든 없든 이런 방식을 좋아한다.
매우 편리하고 유용합니다.
def list_test (L): if L is None : print('list is None') elif not L : print('list is empty') else: print('list has %d elements' % len(L)) list_test(None) list_test([]) list_test([1,2,3])
None
과 공허함은 두 가지 다른 상태이므로 별도로 테스트하는 것이 좋습니다. 위의 코드는 다음 출력을 생성합니다.
list is None list is empty list has 3 elements
None
이 거짓이라는 것은 가치가 없지만. None
-ness에 대한 테스트를 분리하고 싶지 않다면 그렇게 할 필요가 없습니다.
def list_test2 (L): if not L : print('list is empty') else: print('list has %d elements' % len(L)) list_test2(None) list_test2([]) list_test2([1,2,3])
예상 생산
list is empty list is empty list has 3 elements
많은 답변이 제공되었으며 그 중 상당수가 꽤 좋습니다. 나는 체크를 추가하고 싶었다.
not a
None
및 기타 유형의 빈 구조에도 전달됩니다. 진정으로 빈 목록을 확인하려면 다음과 같이 하십시오.
if isinstance(a, list) and len(a)==0: print("Received an empty list")
목록이 비어 있는지 확인하려면:
l = [] if l: # do your stuff.
목록의 모든 값이 비어 있는지 확인하려는 경우. 그러나 빈 목록의 True
l = ["", False, 0, '', [], {}, ()] if all(bool(x) for x in l): # do your stuff.
두 경우를 함께 사용하려는 경우:
def empty_list(lst): if len(lst) == 0: return False else: return all(bool(x) for x in l)
이제 다음을 사용할 수 있습니다.
if empty_list(lst): # do your stuff.
목록이 비어 있는지 여부를 확인하려면 다음 두 가지 방법을 사용할 수 있습니다. 그러나 시퀀스 유형을 명시적으로 확인하는 방법을 피해야 함을 기억하십시오(이는
less pythonic
방법입니다).
def enquiry(list1): if len(list1) == 0: return 0 else: return 1 # –––––––––––––––––––––––––––––––– list1 = [] if enquiry(list1): print ("The list isn't empty") else: print("The list is Empty") # Result: "The list is Empty".
두 번째 방법은
more pythonic
방법입니다. 이 방법은 암시적 검사 방법이며 이전 방법보다 훨씬 더 좋습니다.
def enquiry(list1): if not list1: return True else: return False # –––––––––––––––––––––––––––––––– list1 = [] if enquiry(list1): print ("The list is Empty") else: print ("The list isn't empty") # Result: "The list is Empty"
도움이 되었기를 바랍니다.
@dubiousjim의 솔루션에서 영감을 받아 반복 가능한지 여부에 대한 추가 일반 검사를 사용할 것을 제안합니다.
import collections def is_empty(a): return not a and isinstance(a, collections.Iterable)
참고: 문자열은 반복 가능한 것으로 간주됩니다. - 빈 문자열을 제외하려면 and not isinstance(a,(str,unicode))
시험:
>>> is_empty('sss') False >>> is_empty(555) False >>> is_empty(0) False >>> is_empty('') True >>> is_empty([3]) False >>> is_empty([]) True >>> is_empty({}) True >>> is_empty(()) True
우리는 간단한 if else를 사용할 수 있습니다:
item_list=[] if len(item_list) == 0: print("list is empty") else: print("list is not empty")
print('not empty' if a else 'empty')
조금 더 실용적:
a.pop() if a else None
가장 간단한 버전:
if a: a.pop()
단순히 is_empty()를 사용하거나 다음과 같은 기능을 만드십시오.
def is_empty(any_structure): if any_structure: print('Structure is not empty.') return True else: print('Structure is empty.') return False
목록, 튜플, 사전 등과 같은 모든 데이터 구조에 사용할 수 있습니다. is_empty(any_structure)
사용하여 여러 번 호출할 수 있습니다.
간단한 방법은 길이가 0인지 확인하는 것입니다.
if len(a) == 0: print("a is empty")
python3부터 다음을 사용할 수 있습니다.
a == []
목록이 비어 있는지 확인하려면
편집 : 이것은 python2.7에서도 작동합니다.
왜 이렇게 복잡한 답변이 많은지 모르겠습니다. 꽤 명확하고 직관적입니다
빈 목록의 진리값은 False
반면 비어 있지 않은 목록의 경우 True
입니다.
저를 여기로 데려온 것은 특별한 사용 사례입니다. 저는 실제로 목록이 비어 있는지 여부를 알려주 는 함수를 원했습니다. 내 자신의 함수를 작성하거나 여기에서 람다 식을 사용하는 것을 피하고 싶었습니다(충분히 간단해야 하는 것처럼 보였기 때문에).
foo = itertools.takewhile(is_not_empty, (f(x) for x in itertools.count(1)))
물론 매우 자연스러운 방법이 있습니다.
foo = itertools.takewhile(bool, (f(x) for x in itertools.count(1)))
물론, 사용하지 않는 bool
의 if
(예 if bool(L):
가 암시 있기 때문에). 그러나 "비어 있지 않음"이 함수로 명시적으로 필요한 경우에는 bool
이 최선의 선택입니다.
출처 : http:www.stackoverflow.com/questions/53513/how-do-i-check-if-a-list-is-empty
파이썬에서 파일을 어떻게 복사합니까? (0) | 2021.10.27 |
---|---|
private 함수나 private 메서드, 필드 또는 내부 클래스가 있는 클래스를 테스트하려면 어떻게 해야 합니까? (0) | 2021.10.27 |
Android에서 활동 시작 시 EditText가 포커스를 얻지 못하도록 하는 방법 (0) | 2021.10.26 |
텍스트 영역의 크기 조정 가능한 속성을 어떻게 비활성화합니까? (0) | 2021.10.26 |
Python의 목록 메서드 추가와 확장의 차이점은 무엇입니까? (0) | 2021.10.26 |