[Python] 목록이 비어 있는지 어떻게 확인합니까?


Answers

파이썬 방법은 PEP 8 스타일 가이드에서 제공됩니다 ( 는 "권장"을, 아니오 는 "권장하지 않음 "을 의미합니다).

시퀀스 (문자열,리스트, 튜플)의 경우 빈 시퀀스가 ​​거짓이라는 사실을 사용하십시오.

Yes: if not seq:
     if seq:

No:  if len(seq):
     if not len(seq):
Question

예를 들어 다음과 같이 전달 된 경우 :

a = []

빈칸인지 확인하려면 어떻게합니까?




단순히 is_empty ()를 사용하거나 다음과 같은 함수를 작성하십시오 : -

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

목록, 튜플, 사전 등의 모든 data_structure에 사용할 수 있습니다. 이것에 의해, 당신은 단지 is_empty(any_structure) 사용하여 여러 번 호출 할 수 있습니다.




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

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.



파이썬 대화 형 터미널에서 실행되는 다음 코드를 살펴보십시오.

>>> a = []
>>> if a:
...     print "List is not empty";
... else:
...     print "List is empty"
... 
List is empty
>>> 
>>> a = [1, 4, 9]
>>> if a:
...     print "List is not empty";
... else:
...     print "List is empty"
... 
List is not empty
>>> 



또 다른 간단한 방법이 될 수 있습니다.

a = []
if len(a) == 0:
  print("Empty")
else:
  print(" Not empty")



파이썬은 공허의 처리에 대해 매우 균일합니다. 다음을 감안할 때 :

a = []

.
.
.

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

"if"문으로 목록 a를 체크하면 비어 있는지 확인할 수 있습니다. 내가 읽었으며 배웠던 것에서 이것은 목록이나 튜플이 비어 있는지보기위한 "파이썬적인"방법입니다.




나는 다음을 선호한다 :

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

읽을 수 있고 변수를 반복 할 len() 과 같은 함수를 호출하는 것에 대해 걱정할 필요가 없습니다. 비록 내가 이런 식의 BigO 표기법이 무엇인지는 잘 모르겠지만 ... 파이썬은 그렇게 우스꽝스럽게 빠르다. 거대한 것이 아니라면 그것이 중요 할 것 같지 않다.




나는 아래를 선호하는 것으로 보았다.

if not a:
    print("The list is empty or null")



패트릭 (받아 들인) 대답 은 맞다 : if not a: 그것을하는 적당한 방법이다. Harley Holcombe의 대답 은 이것이 PEP 8 스타일 가이드에 있다는 것입니다. Ruby 사용자 나 그 밖의 다른 사람들에게 명확하지 않거나 혼란 스럽다는 것을 개인적으로 알았더라도 그 답을 설명하는 것이 어째서 이디엄을 따르는 것이 좋은지에 관한 것입니다.

파이썬 코드와 파이썬 커뮤니티는 매우 강력한 숙어를 가지고 있습니다. 이러한 관용구를 따라하면 파이썬에 익숙한 사람이라면 코드를 더 쉽게 읽을 수 있습니다. 그리고 그 관용구를 위반할 때 그것은 강한 신호입니다.

if not a: 가 아닌 if not a: 빈 목록을 None 또는 숫자 0 또는 빈 튜플 또는 빈 사용자 작성 유형 또는 비어있는 사용자 생성 비 수집 모음 유형 또는 단일 요소 NumPy 배열과 구별하지 않는 if not a: 사실입니다 잘못된 값을 가진 스칼라로 행동하는 등의 일이 있습니다. 때때로 그것에 대해 명시하는 것이 중요합니다. 이 경우 명시 적으로 무엇 을 원하는지 알기 때문에 정확히 테스트 할 수 있습니다. 예를 들어 if not a and a is not None: 제외하고는 아무 것도 거짓 if not a and a is not None: if len(a) != 0: "빈 시퀀스 만 - 시퀀스 외의 모든 것은 여기 오류입니다"등의 의미입니다. . 테스트하려는 항목을 정확하게 테스트하는 것 외에도, 이는이 테스트가 중요하다는 것을 독자에게 알리는 것입니다.

그러나 당신이 명시해야 할 것이 없을 때, if not a: 독자를 오도하는 것입니다. 그렇지 않을 때 중요한 것으로 신호하고 있습니다. (코드의 유연성이 떨어지거나 느려지거나 뭐든간에 중요성은 낮아질 수 있습니다.) 그리고 습관적으로 이런 식의 독자를 오도하는 경우 구별을해야 할 때주의를 끌지 않을 것입니다. 당신은 코드 전체에 "울프 울고"있었어.




다른 사람들은 목록을 넘어 질문을 일반화하는 것처럼 보입니다. 그래서 나는 많은 사람들이 사용할 수있는 다른 유형의 시퀀스에주의해야한다고 생각했습니다. 특히 이것은 "python test empty array"에 대한 첫 번째 Google 공격이기 때문에주의해야합니다. .

numpy 배열에 다른 메소드가 작동하지 않습니다.

list 이 좋거나 다른 표준 컨테이너에서 제대로 작동하는 다른 메서드는 수가 많지 않은 배열에 대해서는 실패하므로 numpy 배열에주의해야합니다. 왜 아래에, 그러나 짧게, 선호하는 방법을 설명하는 이유는 size 를 사용하는 것 size .

"pythonic"방식으로 작동하지 않습니다 : 1 부

numpy는 배열을 bool 의 배열로 캐스트하려고 시도하고 if x 가 일종의 집계 된 진리 값을 위해 모든 bool 을 동시에 평가하려고 시도하기 때문에 "파이썬"방식은 numpy 배열에서 실패합니다. 하지만 이것은 의미가 없으므로 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 부

그러나 적어도 위의 경우는 실패했다고합니다. 정확히 하나의 요소를 가진 열세 개의 배열이있는 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)) )

배열에 요소가 없더라도 1을 반환합니다.

천진난만한 방법

scipy FAQ 에서 설명한 것처럼 numpy 배열을 알고있는 모든 경우에 올바른 방법은 if x.size 에 사용 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 , 수위 배열 또는 다른 것이 있는지 확실하지 않은 경우이 방법을 @dubiousjim이 제공하는 답변 과 결합하여 각 유형에 적합한 테스트가 사용되는지 확인할 수 있습니다. 그다지 "파이썬 성"이 아니지만, 적어도이 의미에서 열등감은 의도적으로 파이썬 성을 깨뜨 렸습니다.

입력이 비어 있는지 확인하는 것 외에도 인덱싱 또는 수학 연산과 같은 다른 numpy 기능을 사용하는 경우에는 입력 수십 개의 배열로 강제하는 것이 더 효율적입니다. 이 작업을 빠르게 수행 할 수있는 몇 가지 좋은 기능이 있습니다. 가장 중요한 것은 numpy.asarray 입니다. 이것은 입력을 받거나, 이미 배열 인 경우에는 아무 일도하지 않으며, 목록, 튜플 등의 배열에 입력을 래핑하며 선택적으로 선택한 dtype 으로 변환합니다. 따라서 수시로 빠를 수 있으며, 입력이 수적으로 배열 된 것으로 가정 할 수 있습니다. 배열에 대한 변환으로 인해 현재 scope 밖으로 되돌아 가지는 않을 것이므로 일반적으로 같은 이름을 사용하기 scope .

x = numpy.asarray(x, dtype=numpy.double)

이렇게하면이 페이지에서 볼 수있는 모든 경우에 x.size 검사가 작동합니다.




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

a = [] #the list

1) 꽤 간단한 pythonic 방법 :

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) 또 다른 어리석은 방법은 exceptioniter() 사용하는 것입니다.

try:
    next(iter(a))
    # list has elements
except StopIteration:
    print("Error: a is empty")