목록이 비어 있는지 확인하는 방법
예를 들어, 다음이 통과된 경우:
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에 잘 list
NumPy 어레이의 경우 s 또는 기타 표준 컨테이너가 고장난다.아래에 이유를 설명하지만, 요컨대, 선호하는 방법은size
.
"피톤적인" 방법이 작동하지 않는다: 1부
NumPy가 배열을 배열로 캐스트하려고 하기 때문에 NumPy 배열에서 "피소닉" 방법이 실패함bool
s, 그리고if x
그 모든 것을 평가하려고 노력하다.bool
s 총체적인 진실 가치를 얻기 위해 한번에.그런데 이건 말이 안 되니까, 이렇게 하는 거야.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:
0
0.0
0j
Decimal(0)
Fraction(0, 1)
- 및 빈 빈 컬렉션 ::
''
()
[]
{}
set()
range(0)
데이터모델 문서:
진실 가치 테스트 및 내장 운영을 구현하기 위해 호출됨
bool()
; 반환해야 한다.False
또는True
. 이 방법이 정의되지 않은 경우__len__()
정의되는 경우 호출되며, 결과가 0이 아닌 경우 개체가 참으로 간주된다.클래스가 둘 다 정의하지 않는 경우__len__()
아닌__bool__()
, 그것의 모든 예는 사실로 간주된다.
그리고
내장 함수를 구현하기 위해 호출됨
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 출처 및 문서의 증거
이것은 의 연장이다.
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 l
38.5ns ± 0.372.하지만 아무도 즐길 수 있는 방법이 없다.not not l
3배의 속도에도 불구하고어처구니없어 보인다.하지만 속도가 이긴다.
내 생각에 문제는 단지 시간적 여유를 가지고 시험하는 것 같다.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)
0
0.0
0j
. - 빈를 들면, 예를어, 빈서(는書)는
''
()
[]
. - 를 들어, 예를어, 매핑은
{}
. - 클래스가 다음을 정의하는 경우 사용자 정의 클래스의 인스턴스
__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)))
물론, 사용하지 마십시오.bool
에if
(즉,if bool(L):
암시되어 있기 때문이다.로서 " "비지 않은" 경우,bool
최선의 선택이야
참조URL: https://stackoverflow.com/questions/53513/how-do-i-check-if-a-list-is-empty
'programing' 카테고리의 다른 글
기본 벡터 아이콘에 반응하여 여러 파일에서 아이콘을 가져오는 방법 (0) | 2022.03.08 |
---|---|
vuetify 아이콘이 표시되지 않음 (0) | 2022.03.08 |
vue-cli 프로젝트에서 포트 번호를 변경하는 방법 (0) | 2022.03.07 |
Firebase 3.3 실시간 데이터베이스가 Resact Native 0.32로 "연결 시도 중"에 고착됨 (0) | 2022.03.07 |
반응 16 : componentDidUpdate 경고: (0) | 2022.03.07 |