문제

예를 들어 다음을 전달한 경우:

a = []

있는지 어떻게 확인하나요? a 비었다?

도움이 되었습니까?

해결책

if not a:
  print("List is empty")

공백의 암시적 부울 사용 list 꽤 비단뱀적이다.

다른 팁

그것을 수행하는 Pythonic 방법은 다음과 같습니다. PEP 8 스타일 가이드 (어디 '권장하다'라는 뜻이고, 아니요 "권장되지 않음"을 의미함):

시퀀스(문자열, 목록, 튜플)의 경우 빈 시퀀스가 ​​거짓이라는 사실을 사용하세요.

예: if not seq:
     if seq:

아니요:  if len(seq):
     if not len(seq):

나는 그것을 명시적으로 선호합니다:

if len(li) == 0:
    print('the list is empty')

이렇게 하면 100% 확실해집니다. li 은 시퀀스(목록)이고 그 크기를 테스트하려고 합니다.내 문제 if not li: ... 잘못된 인상을 준다는 것입니다. li 부울 변수입니다.

다른 사람들은 목록 이상의 질문을 일반화하는 것 같아서 많은 사람들이 사용할 수 있는 다른 유형의 시퀀스에 대한 주의 사항을 추가해야 한다고 생각했습니다. 특히 이것이 "파이썬 테스트 빈 배열"에 대한 첫 번째 Google 히트작이기 때문입니다. .

NumPy 배열에서는 다른 방법이 작동하지 않습니다.

NumPy 배열을 사용할 때는 주의해야 합니다. 왜냐하면 NumPy 배열에서는 잘 작동하는 다른 방법이 있기 때문입니다. lists 또는 기타 표준 컨테이너는 NumPy 배열에 실패합니다.그 이유는 아래에 설명하겠지만, 간단히 말해서 선호하는 방법 사용하는 것입니다 size.

"파이썬" 방식은 작동하지 않습니다.1 부

NumPy가 배열을 배열로 캐스팅하려고 시도하기 때문에 "파이썬" 방식은 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()

"파이썬" 방식은 작동하지 않습니다.2 부

그러나 적어도 위의 경우는 실패했음을 알려줍니다.정확히 하나의 요소로 구성된 NumPy 배열이 있는 경우 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을 반환합니다.

numpythonic 방식

에서 설명했듯이 사이파이 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 = []

a가 비어 있는지 어떻게 확인합니까?

짧은 답변:

부울 컨텍스트에 목록을 배치합니다(예: if 또는 while 성명).테스트할 것이다 False 비어 있으면 True 그렇지 않으면.예를 들어:

if not a:                           # do this!
    print('a is an empty list')

권위에 호소

PEP 8, Python 표준 라이브러리의 Python 코드에 대한 공식 Python 스타일 가이드인 에서는 다음과 같이 주장합니다.

시퀀스(문자열, 목록, 튜플)의 경우 빈 시퀀스가 ​​거짓이라는 사실을 사용하세요.

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에서도 의미론적으로 정확합니다.

그러나 Python은 부울 강제 변환을 통해 목록 개체의 인터페이스에서 직접 이러한 의미를 지원하기 때문에 Python이 아닌 것으로 간주합니다.

로부터 문서 (특히 빈 목록이 포함되어 있다는 점에 유의하세요. []):

기본적으로 클래스가 __bool__() 반환하는 메소드 False 또는 __len__() 객체와 함께 호출 될 때 0을 반환하는 메소드.거짓으로 간주되는 대부분의 내장 객체는 다음과 같습니다.

  • false로 정의된 상수: None 그리고 False.
  • 모든 숫자 유형의 0: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • 빈 시퀀스 및 컬렉션: '', (), [], {}, set(), range(0)

그리고 데이터 모델 문서:

object.__bool__(self)

진리값 테스트 및 내장 작업을 구현하기 위해 호출되었습니다. bool();반환해야 False 또는 True.이 메소드가 정의되지 않은 경우, __len__() 정의된 경우 호출되고 결과가 0이 아닌 경우 객체는 true로 간주됩니다.클래스가 둘 다 정의하지 않은 경우 __len__()...도 아니다 __bool__(), 해당 인스턴스는 모두 true로 간주됩니다.

그리고

object.__len__(self)

내장 함수를 구현하기 위해 호출됩니다. 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')

Pythonic을 수행하면 일반적으로 성능이 향상됩니다.

효과가 있나요?(동등한 작업을 수행하는 데 걸리는 시간이 짧을수록 좋습니다.)

>>> 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 그림자가 져있습니다.

그런 다음 함수를 호출해야 합니다. 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

C 소스 및 문서의 증거

PyVarObject

이는 다음의 확장입니다. PyObject 그것은 ob_size 필드.이는 길이에 대한 개념이 있는 객체에만 사용됩니다.이 유형은 Python/C API에 자주 나타나지 않습니다.이는 확장으로 정의된 필드에 해당합니다. PyObject_VAR_HEAD 매크로.

C 소스에서 포함/listobject.h:

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

나는 이것을 조사하는 것을 즐겼으며 답변을 선별하는 데 많은 시간을 보냅니다.내가 뭔가를 빠뜨리고 있다고 생각되면 댓글로 알려주십시오.

빈 목록 자체는 참값 테스트에서 거짓으로 간주됩니다(참조: 파이썬 문서):

a = []
if a:
     print "not empty"

@다렌 토마스

편집하다:빈 목록을 거짓으로 테스트하는 것에 대한 또 다른 요점 :다형성은 어떻습니까?목록이 목록에 의존해서는 안됩니다.그것은 오리처럼 quack해야합니다. 요소가 없을 때 어떻게 오리 컬렉션을 ''false ''로 만들 것입니까?

duckCollection은 다음을 구현해야 합니다. __nonzero__ 또는 __len__ 그래서 if a:문제없이 작동됩니다.

패트릭의 (수락) 답변 맞습니다: if not a: 올바른 방법입니다. Harley Holcombe의 답변 이것이 PEP 8 스타일 가이드에 있는 것이 맞습니다.하지만 답변 중 어느 것도 이 관용구를 따르는 것이 왜 좋은 생각인지 설명하지 않습니다. 비록 개인적으로 그것이 Ruby 사용자 등에게 충분히 명확하지 않거나 혼란스럽지 않다고 생각하더라도 말입니다.

Python 코드와 Python 커뮤니티에는 매우 강력한 관용구가 있습니다.이러한 관용어를 따르면 Python 경험이 있는 사람이라면 누구나 코드를 더 쉽게 읽을 수 있습니다.그리고 이러한 관용어를 위반하면 이는 강력한 신호입니다.

사실이에요 if not a: 빈 목록을 구별하지 않습니다. None, 숫자 0, 빈 튜플, 사용자가 만든 빈 컬렉션 유형, 사용자가 만든 빈 컬렉션 유형, 거짓 값이 있는 스칼라 역할을 하는 단일 요소 NumPy 배열 등입니다.때로는 이에 대해 명시적으로 설명하는 것이 중요합니다.그리고 그런 경우에는 아시죠? 무엇 명시적으로 설명하고 싶기 때문에 정확히 테스트할 수 있습니다.예를 들어, if not a and a is not None: "없음을 제외한 모든 거짓"을 의미합니다. if len(a) != 0: "빈 시퀀스만 있고 시퀀스 이외의 모든 항목은 여기서 오류입니다"를 의미합니다.테스트하려는 내용을 정확하게 테스트하는 것 외에도 독자에게 이 테스트가 중요하다는 신호를 보냅니다.

하지만 명시적으로 설명할 내용이 없는 경우에는 if not a: 독자를 오도하고 있습니다.중요하지 않은데도 중요한 신호를 보내는 것입니다.(코드의 유연성을 떨어뜨리거나 느리게 만들 수도 있지만 이는 모두 덜 중요합니다.) 습관적으로 독자를 이렇게 오해하게 만들면 하다 코드 전체에서 "울고 있는 늑대"를 사용했기 때문에 구별을 해야 할 때 눈에 띄지 않게 지나갈 것입니다.

왜 확인합니까?

아무도 당신의 질문에 답하지 않은 것 같습니다 필요 먼저 목록을 테스트합니다.추가 컨텍스트를 제공하지 않았기 때문에 처음에는 이 검사를 수행할 필요가 없지만 Python의 목록 처리에 익숙하지 않을 수도 있다고 상상할 수 있습니다.

나는 다음과 같이 주장할 것이다. 가장 파이썬적인 방법은 전혀 확인하지 않고 목록만 처리하는 것입니다.그렇게 하면 비어 있든 가득 차든 올바른 일을 할 것입니다.

a = []

for item in a:
    <do something with item>

<rest of code>

이는 다음의 모든 콘텐츠를 처리하는 이점이 있습니다. , 비어 있음에 대한 구체적인 확인이 필요하지 않습니다.만약에 비어 있으면 종속 블록은 실행되지 않고 인터프리터는 다음 줄로 넘어갑니다.

실제로 배열이 비어 있는지 확인해야 하는 경우 다른 답변으로 충분합니다.

len() O(1) 연산입니다 Python 목록, 문자열, 사전 및 세트의 경우.Python은 내부적으로 이러한 컨테이너의 요소 수를 추적합니다.

자바스크립트 참/거짓에 대한 비슷한 개념이 있습니다..

나는 다음과 같이 썼다:

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 처리할 준비가 된 유형의 값이거나 처리할 준비가 되지 않은 유형이 오류를 발생시킬 것이라고 확신하는 경우(예: TypeError 당신이 전화하면 len 정의되지 않은 값)을 처리할 준비가 되어 있습니다.일반적으로 "파이썬적" 관례는 이 마지막 방식으로 진행되는 것 같습니다.오리처럼 쥐어짜고 꽥꽥거리는 방법을 모르면 DuckError가 발생하도록 하세요.당신은 여전히 ​​​​해야합니다 생각하다 하지만 어떤 유형의 가정을 하고 있는지, 제대로 처리할 준비가 되어 있지 않은 경우가 실제로 올바른 위치에서 오류가 발생하는지 여부에 대해 알아보세요.Numpy 배열은 맹목적으로 Numpy 배열에 의존하는 좋은 예입니다. len 또는 부울 유형 변환이 기대한 대로 정확하게 수행되지 않을 수도 있습니다.

에서 선적 서류 비치 진실값 테스트에 대해:

여기에 나열된 값 이외의 모든 값이 고려됩니다. True

  • None
  • False
  • 모든 숫자 유형의 0(예: 0, 0.0, 0j.
  • 예를 들어, 빈 시퀀스 '', (), [].
  • 예를 들어 빈 매핑은 다음과 같습니다. {}.
  • 사용자 정의 클래스의 인스턴스(클래스가 다음을 정의하는 경우) __bool__() 또는 __len__() 메서드(해당 메서드가 정수 0 또는 bool 값을 반환하는 경우) False.

보시다시피 빈 목록 [] ~이다 거짓, 따라서 부울 값에 대해 수행되는 작업을 수행하는 것이 가장 효율적으로 들립니다.

if not a:
    print('"a" is empty!')

목록이 비어 있는지 확인할 수 있는 몇 가지 방법은 다음과 같습니다.

a = [] #the list

1) 매우 간단한 Python 방식입니다.

if not a:
    print("a is empty")

파이썬에서는 빈 용기 목록, 튜플, 집합, 사전, 변수 등은 다음과 같이 표시됩니다. 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")

나는 다음을 선호합니다:

if a == []:
   print "The list is empty."

방법 1(선호):

if not a : 
   print ("Empty") 

방법 2:

if len(a) == 0 :
   print( "Empty" )

방법 3:

if a == [] :
  print ("Empty")
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- 응, 그럴 필요는 없어.

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")

@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

이와 같이 bool()을 사용해 볼 수도 있습니다.

    a = [1,2,3];
    print bool(a); # it will return True
    a = [];
    print bool(a); # it will return False

나는 목록이 비어 있는지 여부를 확인하는 이 방법을 좋아합니다.

매우 편리하고 유용합니다.

간단한 방법은 길이가 0인지 확인하는 것입니다.

if len(a) == 0:
    print("a is empty")
print('not empty' if a else 'empty')

좀 더 실용적입니다.

a.pop() if a else None

Python3부터 사용할 수 있습니다.

a == []

목록이 비어 있는지 확인하려면

편집하다 :이것은 python2.7에서도 작동합니다.

왜 그렇게 복잡한 답변이 많은지 잘 모르겠습니다.꽤 명확하고 간단해요

그렇지 않은 경우 간단한 방법을 사용할 수 있습니다.

list=[]
if len(list)==0:
    print ("list is empty")
else:
    print ("list is not empty")

간단히 is_empty()를 사용하거나 다음과 같은 함수를 만드세요:-

def is_empty(any_structure):
    if any_structure:
        print('Structure is not empty.')
        return True
    else:
        print('Structure is empty.')
        return False  

목록, 튜플, 사전 등과 같은 모든 데이터 구조에 사용할 수 있습니다.이를 통해 just를 사용하여 여러 번 호출할 수 있습니다. is_empty(any_structure).

목록이 비어 있는지 확인하려면 다음 두 가지 방법을 사용할 수 있습니다.하지만 기억하세요. 시퀀스나 목록을 명시적으로 확인하는 방식은 피해야 합니다. 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 1
    else: 
        return 0

# ––––––––––––––––––––––––––––––––

list1 = [] 

if Enquiry(list1): 
    print ("The list is Empty") 
else: 
    print ("The list isn't empty") 

# Result: "The list is Empty"

도움이 되었기를 바랍니다.

다음 사항을 확인하세요. len(list) == 0 보고: True

목록이 비어 있는지 확인하려면;

l = []
if l:
    # do your stuff.

날씨를 확인하려면 목록의 모든 값이 비어 있습니다.

l = ["", False, 0, '', [], {}, ()]
if all(bool(x) for x in l):
    # do your stuff.

그러나 이는 빈 목록의 경우 True입니다.

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.

빈 목록의 진리값은 다음과 같습니다. 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 최선의 선택입니다.

멍청한 사용법 pop 그리고 try except 조항(권장되지 않음):

a = []
try:
    a.pop()
    print('list isn\'t empty')
except:
    print('list is empty')

산출:

list is empty

비공식적 접근 방식:

 a = []
 try:
  print(a[-1])
 except IndexError:
  print("List is empty")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top