programing

목록이 비어 있는지 확인하는 방법

prostudy 2022. 3. 8. 22:12
반응형

목록이 비어 있는지 확인하는 방법

예를 들어, 다음이 통과된 경우:

a = []

인신매매 를 ?a비어있니?

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

비어 있는 것의 암시적 부울성 사용list꽤 피토닉하다.

그것을 하는 피토닉적인 방법은 PEP 8 스타일 가이드에서 나온 것이다.

시퀀스(스트링, 목록, 튜플)의 경우 빈 시퀀스가 거짓이라는 사실을 사용하십시오.

# Correct:
if not seq:
if seq:

# Wrong:
if len(seq):
if not len(seq):

나는 명시적으로 그것을 선호한다.

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

이렇게 하면 100퍼센트 확실하다.li시퀀스(목록)이고 크기를 테스트하고 싶다.에 대한 나의 문제.if not li: ...라는 잘못된 인상을 준다는 것이다.li부울 변수다.

이것은 "피톤 테스트 빈 배열"과 유사한 질의에 대한 첫 번째 구글 히트작이며, 게다가 다른 사람들은 단순한 목록을 넘어 질문을 일반화하는 것 같아, 나는 많은 사람들이 사용할 수 있는 다른 종류의 시퀀스에 주의사항을 추가해야겠다고 생각했다.

NumPy 어레이에서는 다른 방법이 작동하지 않음

할 필요가 있는데, NumPy에 잘 맞는 은 NumPy에 잘 listNumPy 어레이의 경우 s 또는 기타 표준 컨테이너가 고장난다.아래에 이유를 설명하지만, 요컨대, 선호하는 방법은size.

"피톤적인" 방법이 작동하지 않는다: 1부

NumPy가 배열을 배열로 캐스트하려고 하기 때문에 NumPy 배열에서 "피소닉" 방법이 실패함bools, 그리고if x그 모든 것을 평가하려고 노력하다.bools 총체적인 진실 가치를 얻기 위해 한번에.그런데 이건 말이 안 되니까, 이렇게 하는 거야.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을 반환한다.

수음법.

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 어레이로 강제 설정하는 것이 더 효율적이고 더 일반적일 수 있다.이것을 빨리 하기 위한 몇 가지 좋은 기능들이 있다 - 가장 중요한 것은.이렇게 하면 입력이 필요하거나, 이미 배열된 경우 아무 작업도 수행하지 않으며, 입력 내용이 목록, 튜플 등일 경우 배열로 포장되어 선택적으로 변환할 수 있음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')

펩 8

파이썬의 표준 라이브러리에 있는 파이썬 코드의 공식 파이썬 스타일 가이드인 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에서 의미론적으로 옳다.

그러나 우리는 파이톤이 부울강압을 통해 리스트 객체의 인터페이스에서 이러한 의미론을 직접 지원하기 때문에 비피톤적인 것으로 간주한다.

문서(및 특히 빈 목록을 포함,[]):

기본적으로 객체는 클래스가 a를 정의하지 않는 한 참으로 간주된다.__bool__()돌아오는 방법False또는 a__len__()개체와 함께 호출될 때 0을 반환하는 메서드.다음은 거짓으로 간주되는 기본 제공 객체의 대부분이다.

  • 거짓으로 정의된 상수:None그리고False.
  • 숫자자의 0:00.00jDecimal(0)Fraction(0, 1)
  • 및 빈 빈 컬렉션 ::''()[]{}set()range(0)

데이터모델 문서:

object.__bool__(self)

진실 가치 테스트 및 내장 운영을 구현하기 위해 호출됨bool(); 반환해야 한다.False또는True. 이 방법이 정의되지 않은 경우__len__()정의되는 경우 호출되며, 결과가 0이 아닌 경우 개체가 참으로 간주된다.클래스가 둘 다 정의하지 않는 경우__len__()아닌__bool__(), 그것의 모든 예는 사실로 간주된다.

그리고

object.__len__(self)

내장 함수를 구현하기 위해 호출됨len() 개체의 길이, 정수 >= 0을 반환해야 한다.또한, 정의되지 않은 물체는__bool__()방법 및 사용자__len__()메서드 returns 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확인:

퍼스트 파이썬은 글로브에서 확인해서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

그리고 다음으로는[] == []C해야

>>> dis.dis(lambda: [] == [])
  1           0 BUILD_LIST               0
              2 BUILD_LIST               0
              4 COMPARE_OP               2 (==)
              6 RETURN_VALUE

목록의 길이가 개체 인스턴스 헤더에 캐시되므로 "피소닉" 방법은 훨씬 간단하고 빠른 검사 방법이다.

>>> dis.dis(lambda: not [])
  1           0 BUILD_LIST               0
              2 UNARY_NOT
              4 RETURN_VALUE

C 출처 및 문서의 증거

PyVarObject

이것은 의 연장이다.PyObject더하기 때문에ob_size이것은 길이에 대한 개념이 있는 물체에만 사용된다. API 이 타입은 Python/C API에 .이는 의 확장에 의해 정의된 필드에 해당한다.PyObject_VAR_HEAD매크로

포함/listobject의 c 원본에서.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

코멘트에 대한 응답:

나는 이것이 비어있지 않은 경우에 대해서도 사실이라고 지적하고 싶다. 비록 그것과 마찬가지로 상당히 추하지만 말이다.l=[]그때%timeit len(l) != 0± 90.6ns ± 8.3ns,%timeit l != [] 55.6ns ± 3.09,%timeit not not l38.5ns ± 0.372.하지만 아무도 즐길 수 있는 방법이 없다.not not l3배의 속도에도 불구하고어처구니없어 보인다.하지만 속도가 이긴다.
내 생각에 문제는 단지 시간적 여유를 가지고 시험하는 것 같다.if l:충분하지만 놀랍게도%timeit bool(l)± 101ns ± 2.64ns의 산출량 .흥미롭게도 이 벌칙이 없으면 억지로 농락할 방법이 없다. %timeit l개조가 일어나지 않기 때문에 쓸모없는 것이다.

아이피톤 마법,%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여기서 우리는 비용, 다른 모든 것이 동등하고 가능한 한 모든 것이 최소화되는 경우를 보고자 한다.

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상태 점검이나 목록 자체에, 그리고 만약 있다면, 리스트를 있는 그대로 주는 것이 더 빠르다.

Python은 C로 쓰여진다; 그것은 C 레벨에서 그것의 논리를 사용한다.파이톤에 쓰는 건 뭐든지 느려질 거야.파이썬에 내장된 메커니즘을 직접 사용하지 않는 한 주문은 더 느릴 겁니다.

빈 목록은 참 값 테스트에서 거짓으로 간주된다(파이톤 설명서 참조):

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

@다렌 토머스

편집: 빈 목록을 거짓으로 테스트하지 않는 또 다른 점:다형성은 어떤가?리스트가 리스트가 되는 것에 의존해서는 안 된다.그것은 그냥 오리처럼 꽥꽥거려야만 한다 - 당신은 오리 콜렉션이 아무런 요소도 없는데 어떻게 '거짓말'을 꽥꽥거리게 할 것인가?

은 당의 duckCollection을 해야 한다.__nonzero__또는__len__따라서 if a:는 문제 없이 작동한다.

패트릭의 (수용된) 대답은 옳다.if not a:옳은 방법이야이것이 PEP 8 스타일 가이드에 있다는 할리 홀컴비의 대답이 옳다.그러나 그 어떤 대답도 설명하지 않는 것은, 비록 개인적으로 루비 사용자나 그 어떤 것에도 충분히 명시적이거나 혼란스럽지는 않다고 생각하더라도, 그 관용구를 따르는 것이 왜 좋은 생각인가 하는 것이다.

Python 코드, 그리고 Python 커뮤니티는 매우 강한 숙어를 가지고 있다.그 관용구들을 따르면 파이톤에서 경험하는 모든 사람들이 당신의 코드를 더 쉽게 읽을 수 있다.그리고 그 관용구들을 어겼을 때, 그것은 강한 신호다.

는 것은 사실이다.if not a:빈 리스트와 구별하지 않다None, 또는 숫자 0 또는 빈 튜플 또는 사용자가 만든 빈 수집 유형 또는 사용자가 만든 비 쿼이트 수집 유형 또는 잘못된 값을 가진 스칼라 역할을 하는 단일 요소 NumPy 배열 등.그리고 때로는 그것에 대해 명백하게 말하는 것이 중요하다.그리고 그 경우, 여러분은 무엇을 명시하고 싶은지 알고 있기 때문에, 정확히 그것에 대해 테스트할 수 있다.예를 들어,if not a and a is not None:"없음만 제외하고 모든 거짓"을 의미하지만,if len(a) != 0:"빈 시퀀스만 - 시퀀스 이외의 것은 오류" 등을 의미한다.테스트하고 싶은 것을 정확히 테스트하는 것 외에도, 이것은 또한 독자들에게 이 테스트가 중요하다는 것을 알려준다.

그러나 명시적으로 말할 것이 없을 때, 그 외의 것은.if not a:독자를 오도하는 것이다.그렇지 않을 때만큼 중요한 것을 신호하고 있는 것이다.(코드를 덜 유연하거나, 느리거나, 뭐 그런 것도 있겠지만, 그 모든 것이 덜 중요할 수도 있다.)그리고 만약 당신이 습관적으로 독자를 이렇게 오도한다면, 당신이 구별할 필요가 있을 때, 그것은 당신이 당신의 코드에 "늑대"를 걸어왔기 때문에 눈에 띄지 않게 지나갈 것이다.

도대체 왜 확인하려는 거지?

아무도 애초에 당신이 리스트를 테스트해야 한다는 것에 의문을 제기하지 않은 것 같다.당신이 추가적인 컨텍스트를 제공하지 않았기 때문에, 나는 당신이 애초에 이 검사를 할 필요가 없을 수도 있지만, 파이톤에서의 목록 처리에 익숙하지 않을 수도 있다고 상상할 수 있다.

나는 가장 피상적인 방법은 전혀 확인하지 않고 그냥 목록을 처리하는 것이라고 주장하고 싶다.그렇게 하면 비어 있든 가득 차 있든 옳은 일을 할 것이다.

a = []

for item in a:
    <do something with item>

<rest of code>

이것은 a의 어떤 내용이라도 처리할 수 있는 이점이 있는 동시에, 비어 있는 것에 대한 특정한 확인을 요구하지 않는다.a가 비어 있으면 종속 블록이 실행되지 않고 통역이 다음 회선으로 넘어간다.

배열에 실제로 빈 공간이 있는지 확인해야 하는 경우:

a = []

if !a:
    <react to empty list>

<rest of code>

충분하다

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처리할 준비가 되어 있는 유형의 값 또는 처리할 준비가 되어 있지 않은 유형의 경우 오류가 발생할 수 있음(예:TypeError부르면len당신이 다룰 준비가 되어 있지 않은 가치에 대해.일반적으로, "피토닉" 관습은 이 마지막 길을 가는 것처럼 보인다.오리처럼 쥐어짜서 돌팔매질을 할 줄 모르면 오리 에러를 일으키게 하라.하지만 여러분은 여전히 여러분이 어떤 유형의 가정을 하고 있는지, 그리고 여러분이 적절하게 다룰 준비가 되지 않은 사례들이 제대로 된 장소에서 오류로 이어질 것인지에 대해 생각해야 한다.Numpy 어레이는 맹목적으로 의존하는 좋은 예다.len아니면 부울타입 방송국이 당신이 기대하는 것을 정확히 하지 않을 수도 있다.

진실 가치 테스트에 대한 문서:

여기에 나열된 값 이외의 모든 값이 고려됨True

  • None
  • False
  • 숫子의 0)00.00j.
  • 빈를 들면, 예를어, 빈서(는書)는''()[].
  • 를 들어, 예를어, 매핑은{}.
  • 클래스가 다음을 정의하는 경우 사용자 정의 클래스의 인스턴스__bool__()또는__len__()메서드, 해당 메서드가 정수 0 또는 bool 값을 반환할 때False.

보이는 바와 같이, 빈 리스트[]부울 값에 대해 수행될 작업을 수행하는 것이 가장 효율적인 것으로 들림:

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. 목록을 간단히 술어(부울되돌리기)로 취급할 수 있다.그리고 aTrue값이 비흡수임을 나타낼 수 있다.

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.

목록이 비어 있는지 여부를 확인하려면 다음 두 가지 방법을 사용하십시오.그러나 기억하라, 우리는 명시적으로 시퀀스의 유형을 확인하는 방식을 피해야 한다.

def enquiry(list1):
    return len(list1) == 0

# ––––––––––––––––––––––––––––––––
      
list1 = [] 

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

# Result: "The list is Empty".

두 번째 방법은 좀 더 피토닉한 방법이다.이 방법은 암묵적인 견제의 방법이며 이전 방법보다 훨씬 더 선호된다.

def enquiry(list1): 
    return not list1

# ––––––––––––––––––––––––––––––––
      
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

그렇지 않다면 간단한 방법이 필요할 것이다.

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

물론, 사용하지 마십시오.boolif(즉,if bool(L):암시되어 있기 때문이다.로서 " "비지 않은" 경우,bool최선의 선택이야

참조URL: https://stackoverflow.com/questions/53513/how-do-i-check-if-a-list-is-empty

반응형