Siyahının boş olub olmadığını necə yoxlamaq olar?

Məsələn, əgər aşağıdakılar ötürülürsə:

 a = [] 

Bir olub-olmadığını yoxlamaq üçün necə?

3040
10 сент. Ray Vega tərəfindən hazırlanan 10 Sep. 2008-09-10 09:20 '08 saat 09:20 'da 2008-09-10 09:20
@ 49 cavab
  • 1
  • 2
 if not a: print("List is empty") 

Boş siyahısı örtük məntiqindən istifadə etmək olduqca pythonicdir.

4321
10 сент. Patrick Sep 10 tərəfindən verilmiş cavab 2008-09-10 09:28 '08 saat 09:28 'da 2008-09-10 09:28

Bunu PEP 8 stilində (" Bəli" "Tövsiyə" və " Xeyr" "Tövsiyə edilmir " deməkdir) "bunu etmək üçün Pythonic yolu:

border=0

Sıralar (strings, siyahıları, tuples) üçün boş sxemlərin yalan olduğunu istifadə edin.

 Yes: if not seq: if seq: No: if len(seq): if not len(seq): 
950
10 сент. Cavab Harley Holcombe tərəfindən verilir . 2008-09-10 13:33 '08 at 13:33 2008-09-10 13:33

Bunu açıqca üstün tuturam:

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

Beləliklə, li nin bir sıra (siyahı) olduğu aydındır və biz onun ölçüsünü yoxlamaq istəyirik. Mənim problemim if not li: ... ilə if not li: ... ki, li məntiqi bir dəyişən olduğu yalan təəssürat verir.

583
05 сент. Jabba tərəfindən verilmiş cavab 05 Sep. 2011-09-05 03:30 '11 saat 03:30 'da 2011-09-05 03:30

Digər insanlar siyahıdan kənara çıxan bir sual ümumiləşdirmək kimi görünür, buna görə də çoxdan istifadə edə biləcəyi bir sıra sıraya bir sifariş əlavə edəcəyini düşündüm, xüsusən Google bu "boş python array"

Digər üsullar numpy diziləri üçün işləmir

Numpy dizileriyle diqqətli olmalısınız, çünki list və ya digər standart konteynerlər üçün yaxşı işləyən digər üsullar numpy dizilerinde çalışmaz. Aşağıdakı səbəbləri izah edirəm, amma qısa bir şəkildə, üstünlük verilən üsul size istifadə etməkdir.

"Pythonic" metodu işləmir: 1-ci hissə

Numpy dizisi numpy dizileriyle "Pythonic" üsulu ilə uğursuz olur, çünki numpy s soxmaq üçün bir sıra aktarmağa çalışır və if x bu həqiqətin bir neçə kümülatif dəyəri üçün bool zamanda bütün boolları qiymətləndirməyə çalışırsa. Ancaq heç bir məna vermir, belə ki, bir ValueError almaq:

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

"Pythonic" metodu işləmir: 2-ci hissə

Amma ən azından yuxarıda göstərilən bir hadisə sizə deyilmir. Bir tam ədədi olan bir numpy array if , if səhv ala bilməyiniz mənasında "işləyəcək". Lakin, bu tək element 0 (və ya 0.0 ya da false , ...) dəyərinə malikdirsə, if false :

 >>> x = numpy.array([0,]) >>> if x: print("x") ... else: print("No x") No x 

Ancaq aydın olur ki, x var və boş deyil! Bu nəticə istədiyin deyil.

len istifadə edilməsi gözlənilməz nəticələr verə bilər.

Məsələn,

 len( numpy.zeros((1,0)) ) 

array sıfır elementə baxmayaraq 1 qaytarır.

Gözlənilməz bir şəkildə

Scipy FAQ -də izah edildiyi kimi, xsize if x.size bir numpy array var ki, bilmək zaman bütün hallarda düzgün metodu istifadə 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 

Bir list , numpy array və ya başqa bir şey ola biləcəyinə əmin deyilsinizsə , hər bir növü üçün doğru testin istifadə olunduğundan əmin olmaq üçün bu yanaşmanı @cubiousjim ilə birləşdirə bilərsiniz. Çox "pythonic" deyil, lakin numpy qəsdən pythonic, ən azı bu mənada qırdı çıxır.

Yalnız bir girişin boş olub-olmadığını yoxlamaqdan və indeksləmə və ya riyazi əməliyyatlar kimi digər numpy funksiyalarını istifadə etməkdən daha çox şey lazımdırsa, giriş dizisini bir sıra təşkil etmək üçün daha səmərəli (və, əlbəttə, daha çox) numpy. Bunun üçün yaxşı xüsusiyyətləri var - ən vacib şey numpy.asarray . Bu, sizin girişinizi alır, əgər artıq bir sıra varsa və ya bir siyahı, tuple, və s. dtype və bəlkə də seçdiyiniz dtype çevrilirsə heç bir şey dtype . Beləliklə, bu, çox sürətli ola bilər və bu, girişin bir numpy array olduğunu təxmin etdiyini təmin edir. Bir diziyə çevrilməsi cari bölgədən kənara çıxmayacağından, adətən eyni adı istifadə edirik:

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

Bu, x.size bu səhifədə gördüyüm bütün hallarda x.size x.size edəcək.

235
21 февр. Cavab Mike 21 fevralda verilir. 2012-02-21 19:48 '12 at 7:48 pm 2012-02-21 19:48

Əsl dəyərləri test edərkən boş bir siyahı özündə yalan hesab olunur ( python sənədlərinə baxın ):

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

@Daren Thomas

EDIT: Testə qarşı başqa bir nöqtə boş bir siyahıdır: Yanlış: polimorfizmi necə edir? Siyahıya asılı olmayaraq - siyahı. O, bir ördək kimi qıvrılmalıdır - heç bir elementi olmayan bir "yanlış" ördək necə alacaqsınız?

Sizin duckCollection __nonzero__ və ya __len__ tətbiq etməlidir, belə ki: əgər __len__ işləyəcəkdir.

116
10 сент. Peter Hoffmann tərəfindən verilmiş cavab 10 sentyabr 2008-09-10 09:31 '08 at 09:31 2008-09-10 09:31

Siyahının boş olub olmadığını yoxlamaq üçün ən yaxşı yol

Məsələn, əgər aşağıdakılar ötürülürsə:

 a = [] 

Boş olub olmadığını necə yoxlamaq olar?

Qısa cavab:

Siyahıı məntiqi bir kontekstdə yerləşdirin (məsələn, if və ya if ). Boş olduğu halda False yoxlayır, əksinə True . Məsələn:

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

Hakimiyyətə müraciət

PEP 8 , standart Python kitabxanasındakı Python kodunun rəsmi Python stilinin rəhbərliyi deyir:

Sıralar (strings, siyahıları, tuples) üçün boş sxemlərin yalan olduğunu istifadə edin.

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

Standart kitabxana kodunun mümkün qədər real və doğru olmasını gözləmək lazımdır. Amma niyə bu və niyə bu təlimata ehtiyac var?

izahat

Python üçün yeni olan təcrübəli programcılardan bu kodu tez-tez görürəm:

 if len(a) == 0: # Don't do this! print('a is an empty list') 

Və tənbəl dillər istifadəçilər bunu etmək üçün cazibədar ola bilər:

 if a == []: # Don't do this! print('a is an empty list') 

Onlar digər dillərdə doğrudur. Və Python da semantically doğru deyil.

Lakin Python bu qeyri-Pythonik hesab edirik, çünki Python bu məntiqə mantıksal məcburi istifadə edərək siyahı obyektlərinin interfeysində birbaşa dəstək verir.

Sənədlərdən (və boş siyahısını daxil edin, [] ) qeyd edin:

Bir obyekt ilə çağırıldığında __len__() False metodu və ya __len__() . Daxili obyektlərin əksəriyyəti saxta oxunur:

  • Yalan olaraq təyin edilən sabitlər: NoneFalse .
  • hər hansı sayısal növün sıfırı: 0 , 0.0 , 0j , Decimal(0) , 0j Fraction(0, 1)
  • boş diziler və koleksiyonlar: '' , () , [] , {} , set() , range(0)

Datamodel sənədləri:

object.__bool__(self)

Həqiqi dəyər testi və daxili əməliyyat bool() əməliyyatını həyata keçirmək üçün çağırıldı; False və ya True . Bu metod müəyyən edilmədikdə, __len__() , müəyyən edildikdə və nəticəsi sıfır deyilsə, obyekt doğru sayılır. Əgər bir sinif __len__() və ya __bool__() , bütün nümunələri doğru sayılır.

və həmçinin

object.__len__(self)

Daxili funksiyanı len() tətbiq etmək üçün çağırıldı. Bir obyektin uzunluğunu, bir tamsayı> = 0 döndürmeli. Bundan əlavə, __bool__() metodu __len__() tanımlamayan bir obyekt sıfır __len__() kontekstində saxta hesab olunur.

Buna görə, əvəzinə:

 if len(a) == 0: # Don't do this! print('a is an empty list') 

və ya bu:

 if a == []: # Don't do this! print('a is an empty list') 

Bunu edin:

 if not a: print('a is an empty list') 

Pythonic'in adətən performansı ödəyir:

Bunun üçün ödəniş mi? (Xahiş edirik, bərabər əməliyyat yerinə yetirmək üçün daha az vaxt :)

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

Miqyasda, burada funksiyanı çağırmaq və bina tikmək və yuxarıda istifadə edilən boş çeklərin dəyərindən çıxa biləcək boş bir siyahısını geri qaytarmaq xərcləri var:

 >>> min(timeit.repeat(lambda: [], repeat=100)) 0.07074015751817342 

len ki, daxili len funksiyası ilə yoxlanılan uzunluq 0 ilə müqayisədə ya da boş bir siyahı üçün yoxlanılır, sənədləşdirilmiş olduğu kimi, daxili dil sintaksisindən daha az effektivdir.

Niyə?

len(a) == 0 çek:

İlk Python, len gölgeli olacağını görmek üçün global değişkenleri kontrol etməlidir.

Sonra funksiyanı 0 yüklə və Python (C yerine) bir bərabərlik müqayisə etməli:

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

[] == [] üçün lazımsız bir siyahı yaratmalı və daha sonra Python virtual maşınında (C-dən fərqli olaraq)

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

Siyahının uzunluğu obyektin başlığında önbelleğe alındığından, "Pythonic" yolu daha asan və daha sürətli olur:

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

C mənbəyindən və sənədlərindən məlumatlar

PyVarObject

Bu bir ob_size sahəsi əlavə edən ob_size uzadılmasıdır. Bu yalnız uzunluq konsepsiyasına malik obyektlər üçün istifadə olunur. Bu tip, tez-tez Python / C API'da görünmür. PyObject_VAR_HEAD makro PyObject_VAR_HEAD ilə təyin olunan sahələrə cavab verir.

Mənbədən c əlavə etmək üçün / listobject.h :

 typedef struct { PyObject_VAR_HEAD  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 

Mən bunu araşdırmağı xoşlayıram və cavablarımda çox vaxt sərf edirəm. Bir şey buraxdığımı düşünürsənsə, şərhlərdə bildirin.

112
20 авг. Aaron Hall 20 aug. 2017-08-20 06:50 '17 də 6:50 2017-08-20 06:50

Patrikin cavabı (qəbul edildi) doğru: if not a: bunu etmək üçün doğru yol. Cavab Harley Holcombe bu PEP 8 stil təlimatında olduğunu doğrudur, amma cavablardan heç biri, deyilənləri təqib etmək üçün yaxşı bir fikirdir - hətta Ruby istifadəçiləri və ya başqa bir şey üçün şəxsən açıq-aşkar və ya kafa karıştırmayan olsa belə.

Python kodu və Python cəmiyyəti çox güclü deyimlərə malikdir. Bu deyimlərdən sonra Python-da təcrübə alan hər kəs üçün kodu oxumaq asandır. Bu sözləri qırdığınız zaman güclü bir siqnaldır.

Doğrudur ki, if not a: boş olmayan siyahılardan və ya sayısal 0, boş boşluqlardan və ya istifadəçi tərəfindən hazırlanmış boş yığım növlərindən və ya boş istifadəçi yaradılmış komplekssiz kolleksiyalardan və ya bir elementli NumPy arrayından seçilmirlərsə, saxta dəyərlər və s. Və bəzən aydın olmaq vacibdir. Və bu vəziyyətdə, açıq-aydın olmaq istədiyinizi bilirsiniz, buna görə də əmin ola bilərsiniz. Məsələn, if not a and a is not None: " if not a and a is not None: bir şey yalan if not a and a is not None: " deməkdir və if len(a) != 0: "yalnız boş sxemlər" və "ardıcıllıqdan başqa hər şey burada səhvdir" deməkdir və .d.) Test etməyiniz üçün sınağa əlavə olaraq oxucuya da bu testin vacib olduğunu bildirir.

Ancaq danışmaq üçün if not a: şey if not a: , başqa bir şey if not a: oxucuları aldatmaq. Olmazsa əhəmiyyətli bir şey siqnalı verirsiniz. (Kodunuzu daha az çevik və ya yavaş və ya başqa bir şey edə bilərsiniz, amma bu daha az vacibdir.) Və əgər oxucuya bu cür yanlışlıqla yanaşarsanız, fərqlənməli olmağınız zaman diqqətinizə düşməyəcəkdir. kodunuzun üzərində bütün "ağlayan qurdlar".

87
03 дек. cavab 03 dekabrda abarnert verilir . 2014-12-03 05:21 '14 at 5:21 AM 2014-12-03 05:21

Aşağıda aşağıda gördük:

 if not a: print("The list is empty or null") 
67
10 сент. Cavab hazzen verildi 10 Sep 2008-09-10 09:28 '08 saat 09:28 'da 2008-09-10 09:28

Niyə yox?

Heç kim əvvəl siyahıdan yoxlama tələbini qaldırdı. Heç bir əlavə kontekst verməmiş olduğunuzdan bəri, bu qaydaya ilk növbədə etməli olmağınızı düşünə bilərəm, amma onlar Python-da siyahıdan işləməyəcəklər.

Mən ən pythonic yolu yoxlamaq deyil, sadəcə siyahı emal etmək demək olardı. Beləliklə, o, doğru və ya dolu olsun.

 a = [] for item in a: <do something with item> <rest of code> 

Bu boşluq üçün xüsusi test tələb etmədən hər hansı bir məzmunun işlənməsinin üstünlüyünə malikdir. Bir boşluq varsa, asılı blok yerinə yetirilmir və tərcüməçi növbəti xəttə gedəcək.

Həqiqətən, boşluğun serialını yoxlamaq lazımdırsa, çoxlu cavablar var.

59
06 окт. Cavab MrWonderful Oct 06 tərəfindən verilir 2015-10-06 22:25 '15 at 10:25 pm 2015-10-06 22:25

len() siyahıları, strings, dictations və Python dəstləri üçün O (1) əməliyyatıdır . Python daxili konteynerlərdə elementlərin sayını izləyir.

JavaScript həqiqət / saxta oxşar fikir var .

54
15 сент. Cavab George V. Reilly tərəfindən verilir . 15 sentyabr. 2008-09-15 08:50 '08 saat 08:50 'da 2008-09-15 08:50

Mən yazdım:

 if isinstance(a, (list, some, other, types, i, accept)) and not a: do_stuff 

-1 səsvermədi. Mən əminəm ki, bu, oxucunun strategiyaya etiraz etdiyindən və ya cavabın faydalı olduğu kimi təqdim olunduğuna görə düşünülmüşdür. Bu sonuncu olduğumu iddia edəcəyəm, çünki --- "python" deyilənlərdən asılı olmayaraq, bu doğru strategiyadır. Əgər artıq xaric deyilsinizsə və ya a , məsələn, False olduğu hallarda işləməyə hazırsanız, a , daha çox məhdudlaşdıran bir test lazımdır if not a: Bu kimi bir şey istifadə edə bilərsiniz:

 if isinstance(a, numpy.ndarray) and not a.size: do_stuff elif isinstance(a, collections.Sized) and not a: do_stuff 

Yuxarıda @Mike cavabına cavab olaraq ilk test. Üçüncü xətt də əvəz edilə bilər:

 elif isinstance(a, (list, tuple)) and not a: 

yalnız müəyyən növlərin nümunələrini (və onların alt tiplərini) qəbul etmək və ya istifadə etmək istəyirsinizsə

 elif isinstance(a, (list, tuple)) and not len(a): 

Açıq tipli yoxlama olmadan buraxa bilərsiniz, ancaq ətraf konteksti artıq hazır olduğunuz növlərin dəyərini təmin edir və ya istifadə etdiyiniz növlərin emal üçün hazırlanmadığından əmin olduqda səhvlər (məsələn, , bir TypeError , TypeError zəng TypeError , TypeError hazırsınız. Ümumiyyətlə, "pythonic" müqavilələri son yol kimi görünür. Onu bir ördək kimi sıxışdırın və o, necə döymək bilməməsi vəziyyətində DuckError qaldırsın. Hələ hansı fərziyyələr etdiyinizi və düzgün yanaşmanı tətbiq etməyə hazır olmadığınız hallarda, doğru yerlərdə səhvlər edəcəyini düşünmək məcburiyyətindəsiniz. Nümunə seriallar yalnız len üzərinə kör-çöhrlə güvənən yaxşı bir nümunədir, ya da məntiqli tip sizin gözlədiyiniz hər şeyi edə bilməz.

32
31 мая '12 в 17:35 2012-05-31 17:35 Cavab şübhəlilərə 31 may, 17: 35-da verilir. 2012-05-31 17:35

Python boşluq müalicəsi baxımından çox uyğun gəlir. Aşağıdakıları nəzərə alaraq:

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

Boş olub olmadığını görmek üçün bir if deyimi olan siyahısı yoxlayın. Mən oxudum və ona öyrətdiyimdən, bu siyahı və ya boşluq boş olduğunu görmək üçün "Pythonic" bir yoldur.

28
02 июня '12 в 18:40 2012-06-02 18:40 Cavab verilir octopusgrabbus 02 iyun '12 saat 18:40 2012-06-02 18:40

Mən istifadə etdiyim üsullardan bəziləri:

 if not a: print "list is empty" if len(a) == 0: print "list is empty" 
24
27 окт. Hackaholic tərəfindən verilən cavab 27 oktyabr. 2014-10-27 03:35 '14 saat 03:35 'da 2014-10-27 03:35

Həqiqət dəyərlərini yoxlamaq üçün sənədlərdən :

Buradakılardan başqa bütün dəyərlər True sayılır True

  • None
  • False
  • hər hansı sayısal 0j sıfır, məsələn, 0 , 0.0 , 0j .
  • hər hansı boş bir sıra, məsələn '' , () , [] .
  • hər hansı bir boş xəritə, məsələn {} .
  • sinif bir __bool__() və ya __len__() metodunu __len__() , bu üsul 0 yaxud bool False dəyərini qaytarır.

Gördüyünüz kimi, boş [] siyahısı səhvdir, buna görə də, bir boolean dəyəri ilə həyata keçirilmişdir ən effektiv səslər:

 if not a: print('"a" is empty!') 
24
01 янв. cavab Snađoshƒaӽ 01 jan verildi . 2016-01-01 21:18 '16 'da 21:18' də 2016-01-01 21:18

Boş bir siyahısını yoxlamaq üçün bir neçə üsul vardır:

 a = [] #the list 

1) Pretty sadə pythonic yolu:

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

Pythonda, boş konteynerlər , məsələn, siyahılar, tuples, dəstlər, dikişlər, dəyişənlər və s. False hesab olunur. Siz sadəcə olaraq siyahısı mantıksal bir dəyər kimi döndərə bilərsiniz. Və True dəyəri boş olmadığını göstərir.

2) . Aydın olaraq: len() istifadə edərək, uzunluğu tapmaq və uyğun olub olmadığını yoxlayın 0 :

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

3) Və ya anonim bir boş siyahı ilə müqayisə:

 if a == []: print("a is empty") 

4) Başqa bir axmaqlıq exceptioniter() istifadə etməkdir:

 try: next(iter(a)) # list has elements except StopIteration: print("Error: a is empty") 
18
28 нояб. Cavab 28 noyabrda İnconnu tərəfindən verilir. 2016-11-28 17:18 '16 'da 17:18' də 2016-11-28 17:18 'də

Mən aşağıdakıları üstün tuturam:

 if a == []: print "The list is empty." 
10
10 сент. Cavab 10 sentyabr tarixində verix verilir 2008-09-10 09:43 '08 at 09:43 2008-09-10 09:43
 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]) 

Bəzən Həyatını yoxlamaq və boşluq üçün ayrı-ayrılıqda test etmək faydalıdır, çünki bu iki fərqli vəziyyətdir. Yuxarıda göstərilən kod aşağıdakı çıxışı verir:

 list is None list is empty list has 3 elements 

Heç bir şeyə dəyər olmasa da, heç bir şey yalan deyil. Buna görə də, testi Yoxsulluq üçün ayırmaq istəmirsinizsə, bunu etmək lazım deyil.

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

gözləniləndir

 list is empty list is empty list has 3 elements 
7
14 апр. Cavab Taqar 14 apr. 2016-04-14 00:55 '16 'da 0:55 2016-04-14 00:55

Əlbəttə var və

print a or "List is empty"

6
16 февр. Cavab 16 fevralda spize tərəfindən verilir. 2016-02-16 02:18 '16 'da 2:18' də 2016-02-16 02:18 'də

Ayrıca edə bilərsiniz:

 if len(a_list): print "it not empty" 
5
02 дек. Cavab AndrewSmiley tərəfindən verilir 02 Dekabr. 2017-12-02 22:48 '17 at 10:48 pm 2017-12-02 22:48
 >>> 'Not Empty' if a else 'Empty' 


Nümunələrə baxın

 >>> a = [] >>> 'Not Empty' if a else 'Empty' 'Empty' 


 >>> a = [0, 1, 2, 3] >>> 'Not Empty' if a else 'Empty' 'Not Empty' 
4
02 дек. cavab Shameem 02 dekabr verilir . 2017-12-02 22:48 '17 at 10:48 pm 2017-12-02 22:48

Python3 dan başlayaraq istifadə edə bilərsiniz

 a == [] 

siyahı boş olub olmadığını yoxlayın

EDIT: Python2.7 ilə də işləyir ..

Niyə çox mürəkkəb cavablar olduğuna əmin deyiləm. Bu olduqca aydın və sadədir.

3
06 нояб. Cavab Dheeraj M Pai tərəfindən verilir 06 2018-11-06 12:55 '18 at 12:55 2018-11-06 12:55

Sətirin uzunluğunun sıfır olub olmadığını yoxlaya bilərsiniz (və ya deyil). Serialın uzunluğu sıfırsa , boşdur . aşağıdakıları cəhd edin:

 a = [] if len(a)==0 : print "List is empty" 
3
14 нояб. cavab 14 noyabr tarixində Siddharth Satpathy tərəfindən verilir. 2018-11-14 22:02 '18 saat 10:02 'da 2018-11-14 22:02

Başqa bir sadə yol ola bilər

 a = [] if len(a) == 0: print("Empty") else: print(" Not empty") 
3
19 марта '18 в 14:14 2018-03-19 14:14 Cavab Devendra Bhat'a 19 Mart 18:18 ' də veriləcək, 2018-03-19 14:14

Hər hansı bir boş sıra Python-da saxta qiymətləndirir :

 >>> lst = [] >>> bool(lst) False >>> not lst True >>> 

Bu, lüğətlər üçün də oxşar cavablara əsaslanır.

  • hər hansı boş bir sıra, məsələn, '', (), [].

  • hər hansı bir boş xəritə, məsələn {}.

2
02 дек. Cavab Tarek Kalaji 02 dekabrda verilir. 2017-12-02 22:48 '17 at 10:48 pm 2017-12-02 22:48

Çox cavab verildi və onların çoxu çox yaxşıdır. Yalnız çekimi əlavə etmək istərdim

 not a 

Həm də None və digər boş tərkiblərə gəlin. Boş bir siyahısını yoxlamaq istəyirsinizsə, bunu edə bilərsiniz:

 if isinstance(a, list) and len(a)==0: print("Received an empty list") 
2
12 окт. HackerBoss 12 oktyabr 2018-10-12 07:01 '18 saat 07:01 'də 2018-10-12 07:01

Əvvəlki cavablarda göstərilməyən və list boş və ya list.__sizeof__() yoxlamaq üçün "ən yaxşı yol" ola bilməyən başqa bir üsul ola bilməz, xüsusi metod list.__sizeof__() , bu, cari siyahısını sadəcə yaddaşda əks etdirir baytlarda.

Məsələn:

Boş siyahı

 a = [] # Or a = list() size = a.__sizeof__() print(size) # With 64bit OS it will output: 40 >>> 20 

Boş siyahısı yoxdur

 a = [1] b = list('1') size_a = a.__sizeof__() size_b = b.__sizeof__() print(size_a) print(size_b) # With 64bit OS it will output: # 48 # 72 >>> 24 >>> 36 

Gördüyümüz kimi, none empty list sizeof empty list üçün sizeof artıqdır.

Belə ki, siyahı boş olub-olmadığını yoxlaya bilərik, məsələn aşağıdakı kimi:

 # For 64 bit OS: # is_empty = lambda x: x.__sizeof__() is 40 is_empty = lambda x: x.__sizeof__() is 20 a = [] # Or: a = list() b = [1] c = list('1') print("a is empty:", is_empty(a)) print("b is empty:", is_empty(b)) print("c is empty:", is_empty(c)) >>> a is empty: True >>> b is empty: False >>> c is empty: False 

Bonus:

Boş dict , strtuple sizeof :

 bonus = [{}, '', ()] for k in bonus: print(k.__sizeof__()) # With 64 bit OS it will output: # 264 # 49 # 24 >>> 132 # size of an empty dict >>> 25 # size of an empty str >>> 12 # size of an empty tuple 
2
02 дек. Cavab Chiheb Nexus tərəfindən 02 dekabr. 2017-12-02 22:48 '17 at 10:48 pm 2017-12-02 22:48

Keçir:

 if list: #Not empty else: #Empty 

if выполняет первый оператор, если list не является пустой последовательностью, None , False или 0

2
ответ дан An Epic Person 02 дек. '17 в 22:48 2017-12-02 22:48

Будучи вдохновленным решением @dubiousjim, я предлагаю использовать дополнительную общую проверку того, является ли это чем-то итерируемым

 import collections def is_empty(a): return not a and isinstance(a, collections.Iterable) 

Примечание: строка считается итерируемой. - добавьте and not isinstance(a,(str,unicode)) , если вы хотите исключить пустую строку

Test:

 >>> 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 
2
ответ дан AndreyS Scherbakov 29 марта '17 в 5:58 2017-03-29 05:58
 a = [] # First way if a: print 'yes' else: print 'no' # Second way if len(a) != 0: print 'yes' else: print 'no' 
2
ответ дан Rajiv Sharma 02 дек. '17 в 22:48 2017-12-02 22:48

мы могли бы использовать простой, если еще:

 list=[] if len(list)==0: print ("list is empty") else: print ("list is not empty") 
1
ответ дан l. zhang 06 янв. '19 в 22:15 2019-01-06 22:15
  • 1
  • 2

Другие вопросы по меткам или Задайте вопрос