Kaip patikrinti, ar sąrašas yra tuščias?

Pavyzdžiui, jei perduodama:

 a = [] 

Kaip patikrinti, ar?

3040
10 сент. nustatė Ray Vega . 2008-09-10 09:20 '08 ne 9:20 2008-09-10 09:20
@ 49 atsakymai
  • 1
  • 2
 if not a: print("List is empty") 

Netiesioginio tuščio sąrašo logika yra gana pythoninė.

4321
10 сент. Patrick Sep 10 atsakymas 2008-09-10 09:28 '08 at 9:28 2008-09-10 09:28

Pythoninis būdas tai padaryti pagal PEP 8 stiliaus vadovą (kur „ Taip“ reiškia „rekomenduojama“ ir „ Ne“ reiškia „nerekomenduojama“):

border=0

Jei naudojate sekas (eilutes, sąrašus, eilutes), naudokite tai, kad tuščios sekos yra klaidingos.

 Yes: if not seq: if seq: No: if len(seq): if not len(seq): 
950
10 сент. atsakymą pateikė Harley Holcombe 10 sep . 2008-09-10 13:33 '08, 13:33 2008-09-10 13:33

Aš tai norėčiau aiškiai:

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

Taigi 100% aišku, kad li yra seka (sąrašas), ir mes norime patikrinti jo dydį. Mano problema, if not li: ... yra tai, kad jis suteikia klaidingą įspūdį, kad li yra loginis kintamasis.

583
05 сент. Atsakymas, kurį pateikė Jabba 05 Sep. 2011-09-05 03:30 '11 at 3:30 2011-09-05 03:30

Kiti žmonės, atrodo, apibendrina klausimą, kuris viršija sąrašus, todėl maniau, kad pridėsiu rezervaciją kitam sekos tipui, kurį daugelis žmonių gali naudoti, ypač todėl, kad tai yra pirmasis „Google“ paspaudimas „tuščia python masyvu“,

Kiti metodai neveikia numpy masyvams

Jūs turite būti atsargūs su netipy masyvais, nes kiti metodai, kurie puikiai veikia list ar kitose standartinėse talpyklose, neveikia masyvų matricoms. Aš paaiškinu, kodėl toliau, bet trumpai tariant, pageidaujamas būdas yra naudoti size .

„Pythonic“ metodas neveikia: 1 dalis

„Pythoninis“ metodas nepavyksta, naudojant „numpy“ matricas, nes numpy bando perkelti masyvą į „ bool s“, o if x bando visus šiuos bool karto įvertinti tam tikra kaupiamoji tiesos vertė. Bet tai nėra prasminga, taigi gausite „ 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() 

„Pythonic“ metodas neveikia: 2 dalis

Tačiau bent jau minėtas atvejis sako, kad jis nepraėjo. Jei turite netipy masyvą, turintį tiksliai vieną elementą, if bus „darbas“ ta prasme, kad negaunate klaidos. Tačiau, jei šio elemento reikšmė yra 0 (arba 0.0 arba false , ...), if klaidingai sukels false :

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

Tačiau aišku, kad x egzistuoja ir nėra tuščias! Šis rezultatas nėra tas, ko norėjote.

Naudojant „ len gali atsirasti netikėtų rezultatų.

Pavyzdžiui

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

grąžina 1, nors masyvas turi nulinius elementus.

Netikėtai

Kaip paaiškinta „ Scipy“ DUK , teisingas metodas visais atvejais, kai žinote, kad turite „numpy“ masyvą, turėtų būti naudojamas, 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 

Jei nesate tikri, ar tai gali būti list , netyra masyvas, ar kažkas kita, galite suderinti šį metodą su atsakymu @dubiousjim , kad įsitikintumėte, jog kiekvienam tipui naudojamas teisingas testas. Ne labai „pythoninis“, bet paaiškėja, kad numpy tyčia sumušė pythoninę, bent jau tuo požiūriu.

Jei jums reikia padaryti daugiau nei tik patikrinti, ar įvestis yra tuščia, ir naudojate kitas netyčias funkcijas, pvz., Indeksavimą ar matematines operacijas, tai tikriausiai yra veiksmingesnė (ir, žinoma, dažniau), kad įvesties masyvas būtų masyvas numpy. Tai yra keletas gerų savybių greitai - svarbiausias dalykas yra numpy.asarray . Jis užima jūsų įvestį, nieko nedaro, jei jis jau yra masyvas arba perkelia įvestį į masyvą, jei tai yra sąrašas, eilutė ir tt, ir, galbūt, konvertuoja jį į pasirinktą dtype . Taigi tai yra labai greita, kai ji gali būti, ir tai užtikrina, kad jūs tiesiog atspėjote, kad įvestis yra numipy masyvas. Paprastai mes naudojame tik tą patį pavadinimą, nes konversija į masyvą nebus išvestis už dabartinio regiono ribų:

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

Tada x.size patikrinta x.size visais atvejais, kuriuos matau šiame puslapyje.

235
21 февр. Atsakymą pateikė Mike , vasario 21 d. 2012-02-21 19:48 '12 at 7:48 pm 2012-02-21 19:48

Tikrų verčių tikrinimo metu tuščias sąrašas laikomas klaidingu (žr. „ Python“ dokumentaciją ):

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

@Dareno Tomas

EDIT: Kitas taškas prieš bandymą yra tuščias: klaidingas: kaip apie polimorfizmą? Jūs neturite priklausyti nuo sąrašo - sąrašo. Jis turėtų būti tik kaip antis - kaip jūs ketinate gauti „klaidingą“ ančių, jei jis neturi daiktų?

Jūsų duckCollection turi įgyvendinti __nonzero__ arba __len__ , taigi, jei: veiks be problemų.

116
10 сент. Peter Hoffmann atsakymas rugsėjo 10 d 2008-09-10 09:31 '08, 9:31 val. 2008-09-10 09:31

Geriausias būdas patikrinti, ar sąrašas yra tuščias

Pavyzdžiui, jei perduodama:

 a = [] 

Kaip patikrinti, ar jis tuščias?

Trumpas atsakymas:

Įrašykite sąrašą loginiu kontekstu (pavyzdžiui, if yra arba, while ). Jis patikrins False jei jis yra tuščias, ir True . Pavyzdžiui:

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

Apeliacinis skundas valdžios institucijoms

PEP 8 , oficialus „Python“ stiliaus vadovas „Python“ kodui standartinėje „Python“ bibliotekoje, nurodo:

Jei naudojate sekas (eilutes, sąrašus, eilutes), naudokite tai, kad tuščios sekos yra klaidingos.

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

Turėtume tikėtis, kad standartinis bibliotekos kodas bus kuo realesnis ir teisingesnis. Bet kodėl taip ir kodėl mums reikia šio vadovo?

paaiškinimas

Tokį kodą dažnai matau iš patyrusių programuotojų, kurie yra nauji „Python“:

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

Ir tingusių kalbų vartotojai gali būti linkę tai padaryti:

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

Jie yra teisingi kitomis kalbomis. Pythone tai netgi yra semantiškai teisinga.

Tačiau mes manome, kad tai nėra „Pythonic“, nes „Python“ palaiko šį semantiką tiesiogiai sąrašo objektų sąsajoje naudojant loginę prievartą.

dokumentų (ir atkreipkite dėmesį į tuščio sąrašo įtraukimą [] ):

Pagal nutylėjimą objektas laikomas teisingu, jei jo klasė neapibrėžia __bool__() kuris grąžina False metodą arba __len__() kuris grąžina nulį, kai skambina su objektu. Čia yra dauguma įmontuotų objektų, skaitančių klaidingą:

  • konstantos, apibrėžtos kaip klaidingos: None ir False .
  • bet kokio skaitinio tipo nulis: 0 , 0.0 , 0j , Decimal(0) , Fraction(0, 1)
  • tuščios sekos ir kolekcijos: '' , () , [] , {} , set() , range(0)

Ir duomenų rinkinio dokumentacija:

object.__bool__(self)

Kviečiama įgyvendinti tikrąją vertės bandymą ir įmontuotą operacinę bool() ; turi grįžti False arba True . Jei šis metodas nėra apibrėžtas, __len__() , jei jis yra apibrėžtas, ir objektas laikomas teisingu, jei jo rezultatas yra nulinis. Jei klasė neapibrėžia nei __len__() nei __bool__() , visi jo egzemplioriai laikomi teisingais.

ir taip pat

object.__len__(self)

Skambinama įdiegti integruotą funkciją „ len() . Turi būti grąžinamas objekto ilgis, sveikas skaičius> = 0. Be to, objektas, kuris neapibrėžia __bool__() metodo __len__() nulinis yra laikomas klaidingu pagal loginį kontekstą.

Todėl vietoj to:

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

arba tai:

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

Ar tai:

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

Darydami tai, ką Pythonic paprastai atsiskaito vykdant veiklą:

Ar už tai mokama? (Atkreipkite dėmesį, kad mažiau laiko atlikti lygiavertę operaciją yra geriau :)

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

Dėl skalės, čia yra išlaidos, susijusios su skambučiu į funkciją ir tuščio sąrašo kūrimą bei grąžinimą, kurį galite išskaičiuoti iš pirmiau nurodytų tuščių patikrinimų kainos:

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

Matome, kad ilgio tikrinimas su įmontuota „ len funkcija, palyginti su 0 arba tuščio sąrašo tikrinimas yra daug mažiau veiksmingas nei naudojant integruotą kalbos sintaksę, kaip nurodyta dokumentuose.

Kodėl?

len(a) == 0 čekį:

Pirmasis „Python“ turėtų patikrinti pasaulinius kintamuosius, kad pamatytų, ar „ len bus užtamsintas.

Tada jis turėtų paskambinti funkcijai, įkelti 0 ir atlikti lygių palyginimą Python (vietoj 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 

[] == [] jis turi sukurti nereikalingą sąrašą ir vėl atlikti Python virtualiosios mašinos palyginimo operaciją (skirtingai nei C)

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

Kelias „Pythonic“ yra daug paprastesnis ir greitesnis, nes sąrašo ilgis išsaugomas objekto pavyzdžio antraštėje:

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

C šaltinio ir dokumentacijos duomenys

PyVarObject

Tai „ PyObject plėtinys, ob_size lauką. Tai naudojama tik objektams, turintiems tam tikrą ilgio sąvoką. Šis tipas dažnai nerodomas Python / C API. Jis atitinka laukus, apibrėžtus „ PyObject_VAR_HEAD makro PyObject_VAR_HEAD .

Iš šaltinio c į Įtraukti / 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 

Man patiko tai ištirti, ir daug laiko praleidžiu atsakymams. Jei manote, kad palieku kažką, prašome pranešti apie tai komentaruose.

112
20 авг. Atsakyti Aaron Hall 20 rug. 2017-08-20 06:50 '17 ne 6:50 2017-08-20 06:50

Patricko atsakymas (priimtas) yra teisingas: if not a: tai yra teisingas būdas tai padaryti. Atsakymas Harley Holcombe teisus, kad tai yra PEP 8 stiliaus vadove, tačiau nė vienas atsakymas nepaaiškina, kodėl gera mintis sekti idiomą - net jei jūs asmeniškai manote, kad tai nėra aiški ar paini Ruby vartotojams ar kitam.

„Python“ kodas ir „Python“ bendruomenė turi labai stiprią idiomą. Po šių idėjų, jūsų kodas yra lengviau skaitomas visiems, kurie turi patirties Python. Ir kai jūs pertraukiate šias idiomas, tai yra stiprus signalas.

Tiesa, kad if not a: nenurodote tuščių sąrašų iš None arba 0 arba tuščių paketų, arba tuščių naudotojo sukurtų kolekcijų tipų, arba tuščių naudotojų sukurtų nebaigtų rinkinių tipų arba vieno elemento NumPy masyvo, veikiančio kaip skalarai su klaidingos vertės ir kt. Ir kartais svarbu būti aiškiais. Šiuo atveju jūs žinote, ką norite aiškiai nurodyti, todėl galite įsitikinti. Pavyzdžiui, if not a and a is not None: reiškia "kažką klaidingą, išskyrus Nieko", o if len(a) != 0: reiškia "tik tuščias sekas - ir viskas, išskyrus seką, yra klaida" ir t .d.) Be to, kad išbandytumėte, ką norite išbandyti, jis taip pat rodo, kad skaitytojas yra svarbus.

Bet jei jūs neturite ką kalbėti, nieko, bet if not a: klaidina skaitytoją. Jūs nesuteikiate svarbaus signalo. (Jūs taip pat galite padaryti kodą mažiau lankstų ar lėtą, ar kažką kitą, bet tai dar mažiau svarbu.) Ir jei jūs paprastai klaidinate skaitytoją, kaip ir tada, tada, kai reikia atskirti, jis nepastebės, nes kad jūsų kodas buvo „verkiantis vilkas“.

87
03 дек. atsakymas pateikiamas abarnert 03 dec. 2014-12-03 05:21 '14 ne 5:21 AM 2014-12-03 05:21

Žiūrėjau toliau kaip pageidaujamą:

 if not a: print("The list is empty or null") 
67
10 сент. atsakymas pateikiamas hazzen 10 sep . 2008-09-10 09:28 '08 at 9:28 2008-09-10 09:28

Kodėl patikrinti?

Niekas, atrodo, nepateikė klausimo, ar reikia pirmiausia patikrinti sąrašą. Kadangi nepateikėte jokio papildomo konteksto, galiu įsivaizduoti, kad pirmiausia nereikės atlikti šio patikrinimo, tačiau jie nėra susipažinę su sąrašo apdorojimu „Python“.

Sakyčiau, kad labiausiai pythoninis būdas yra ne patikrinti, bet tik tvarkyti sąrašą. Taigi jis padarys teisingą dalyką, ar jis būtų tuščias ar pilnas.

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

Tai yra privalumas, kai apdorojamas bet koks turinys, nereikalaujant specialaus tuštumo tikrinimo. Jei a yra tuščias, priklausomas blokas nebus vykdomas, o vertėjas eis į kitą eilutę.

Jei tikrai reikia patikrinti tuštumą, pakanka kitų atsakymų.

59
06 окт. atsakymą pateikė MrWonderful Oct 06 2015-10-06 22:25 '15, 10:25 val. 2015-10-06 22:25

len() yra O (1) operacija sąrašams, styginiams, diktatams ir Python rinkiniams. „Python“ viduje stebi elementų skaičių šiuose konteineriuose.

„JavaScript“ turi panašią tiesos / netikrumo sampratą .

54
15 сент. atsakymą pateikė George V. Reilly 15 rugsėjis. 2008-09-15 08:50 '08 8:50 val. 2008-09-15 08:50

Aš parašiau:

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

kuris buvo balsuotas -1. Nesu tikras, kad tai yra todėl, kad skaitytojai prieštaravo strategijai arba manė, kad atsakymas nebuvo naudingas. Aš apsimetsiu, kad tai yra paskutinis, nes, nepaisant to, kas laikoma „pythonu“, tai yra teisinga strategija. Jei dar neįtraukėte arba esate pasirengę tvarkyti atvejus, kai, pvz., „ False , jums reikia bandymo, kuris yra labiau ribojantis, nei tik if not a: Galite naudoti kažką panašaus:

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

pirmojo bandymo, atsakymo į atsakymą @Mike, aukščiau. Trečią eilutę taip pat galima pakeisti:

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

jei norite priimti tik tam tikrų tipų (ir jų potipių) atvejus arba naudoti

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

Galite palikti be aiškaus tipo patikrinimo, bet tik tuo atveju, jei aplinkinis kontekstas jau užtikrina, kad yra tipų, kuriuos esate pasiruošę apdoroti, vertė arba jei esate tikri, kad tipai, kurie nėra paruošti apdorojimui, sukels klaidų (pvz. , „ TypeError , jei skambinate „ len “ vertei, kuriai ji yra neapibrėžta), kurią esate pasiruošę apdoroti. Apskritai, „pythoniniai“ susitarimai atrodo paskutinis būdas. Suspauskite jį kaip antį ir leiskite jam pakelti DuckError, jei jis nežino, kaip užgesinti. Jūs vis dar turite galvoti apie tai, kokias prielaidas darote ir ar yra atvejų, kai nesate pasiruošę taikyti teisingą požiūrį, jie padarys klaidas teisingose ​​vietose. Nešvarios matricos yra geras pavyzdys, kai tik aklai pasikliauname „ len , arba loginis tipas negali daryti būtent to, ko tikitės.

32
31 мая '12 в 17:35 2012-05-31 17:35 atsakymas duotas dubiousjim gegužės 31 d., 12 val. 17:35 2012-05-31 17:35

„Python“ labai tinka tuštumos gydymui. Atsižvelgiant į šiuos dalykus:

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

Jei norite sužinoti, ar jis yra tuščias, paprasčiausiai patikrinkite sąrašą, jei yra pareiškimas. Iš to, ką aš perskaičiau ir mokiau, tai yra „Pythonic“ būdas pamatyti, ar sąrašas ar paketas yra tuščias.

28
02 июня '12 в 18:40 2012-06-02 18:40 atsakymas duotas Octopusgrabbus 02 birželio 12 d. 18:40 2012-06-02 18:40

Kai kurie iš mano naudojamų metodų yra šie:

 if not a: print "list is empty" if len(a) == 0: print "list is empty" 
24
27 окт. Hackaholic spalio 27 d. 2014-10-27 03:35 '14 at 3:35 am 2014-10-27 03:35

Iš tiesos verčių tikrinimo dokumentacijos :

Visos vertės, išskyrus išvardytas čia, laikomos True

  • None
  • False
  • bet kokio skaitinio tipo nulis, pavyzdžiui, 0 , 0.0 , 0j .
  • bet kokia tuščia seka, pvz., '' , () , [] .
  • bet koks tuščias žemėlapis, pvz., {} .
  • pasirinktinių klasių atvejai, jei klasė apibrėžia __bool__() arba __len__() metodą, kai šis metodas grąžina sveikąjį skaičių 0 arba bool False vertę.

Kaip matote, tuščias [] sąrašas yra klaidingas, todėl tai, kas būtų padaryta naudojant loginę vertę, skamba efektyviausiai:

 if not a: print('"a" is empty!') 
24
01 янв. atsakymas duotas Snađoshƒaӽ 01 sausio. 2016-01-01 21:18 '16 at 21:18 2016-01-01 21:18

Štai keletas būdų, kaip patikrinti tuščią sąrašą:

 a = [] #the list 

1) gana paprastas pythoninis būdas:

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

„Python“ tuščios talpyklos , pvz., Sąrašai, rinkiniai, rinkiniai, punktai, kintamieji ir kt. laikoma False . Jūs galite paprasčiausiai elgtis su sąrašu kaip predikatą (grąžinant loginę vertę). Ir reikšmė True rodo, kad ji nėra tuščia.

2) . Aiškiai: naudojant „ len() kad rastumėte ilgį ir patikrintumėte, ar jis atitinka 0 :

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

3) Arba palyginkite jį su anoniminiu tuščiu sąrašu:

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

4) Kitas kvailas būdas yra naudoti exception ir iter() :

 try: next(iter(a)) # list has elements except StopIteration: print("Error: a is empty") 
18
28 нояб. atsakymą pateikė Inconnu lapkričio 28 d. 2016-11-28 17:18 '16 at 17:18 2016-11-28 17:18

Norėčiau:

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

Kartais naudinga išbandyti „ None ir atskirai - tuos, kurie yra skirtingi. Minėtas kodas sukuria tokią išvestį:

 list is None list is empty list has 3 elements 

Nors nieko verta, kad None yra klaidingas. Todėl, jei nenorite atskirti testo „ None , nereikia to daryti.

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

tikisi

 list is empty list is empty list has 3 elements 
7
14 апр. Atsakyti Tagar 14 balandžio. 2016-04-14 00:55 '16 at 0:55 2016-04-14 00:55

Žinoma, yra ir

print a or "List is empty"

6
16 февр. atsakymą pateikė spedy 16 vasaris. 2016-02-16 02:18 '16 at 2:18 2016-02-16 02:18

Taip pat galite:

 if len(a_list): print "it not empty" 
5
02 дек. Atsakymą pateikė AndrewSmiley 02 gruodis. 2017-12-02 22:48 '17, 10:48 pm 2017-12-02 22:48
 >>> 'Not Empty' if a else 'Empty' 


Žr. Pavyzdžiai

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


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

Nuo python3 galite naudoti

 a == [] 

patikrinkite, ar sąrašas yra tuščias

EDIT: ji veikia ir su python2.7.

Nesu tikras, kodėl yra tiek daug sudėtingų atsakymų. Tai gana aišku ir paprasta.

3
06 нояб. atsakymą pateikė Dheeraj M Pai 06 lapkritis 2018-11-06 12:55 '18 at 12:55 2018-11-06 12:55

Galite patikrinti, ar matricos ilgis yra nulis (ar ne). Jei masyvo ilgis yra nulis , jis yra tuščias . pabandykite atlikti šiuos veiksmus:

 a = [] if len(a)==0 : print "List is empty" 
3
14 нояб. atsakymą pateikė Siddharth Satpathy lapkričio 14 d. 2018-11-14 22:02 '18 prie 10:02 pm 2018-11-14 22:02

Kitas paprastas būdas gali būti

 a = [] if len(a) == 0: print("Empty") else: print(" Not empty") 
3
19 марта '18 в 14:14 2018-03-19 14:14 atsakymas pateikiamas Devendra Bhat, kovo 19, 18, 14, 14 , 14, 14-19

Bet kuri tuščia seka vertinama kaip „False“ „Python“:

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

Tai grindžiama panašiu atsakymu į žodynus.

  • bet kuri tuščia seka, pavyzdžiui, '', (), [].

  • bet koks tuščias žemėlapis, pvz., {}.

2
02 дек. Atsakymas pateikiamas Tarek Kalaji 02 d. 2017-12-02 22:48 '17, 10:48 pm 2017-12-02 22:48

Pateikta daug atsakymų, ir daugelis jų yra gana geri. Aš tik norėjau pridėti tą čekį

 not a 

Taip pat ateikite į None ir kitų tipų tuščias struktūras. Jei tikrai norite patikrinti tuščią sąrašą, galite tai padaryti:

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

Kitas metodas, nenurodytas ankstesniuose atsakymuose ir negali būti „geriausias būdas patikrinti, ar list tuščias, ar ne, naudojamas specialus metodų list.__sizeof__() , kuris grąžina int , kuris atitinka dabartinio atminties sąrašo dydį baitais.

Pavyzdys:

Tuščias sąrašas

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

Nėra tuščio sąrašo

 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 

Kaip matome, none empty list dydis neviršija empty list .

Taigi, galime patikrinti, ar sąrašas yra tuščias, ar ne, pavyzdžiui, taip:

 # 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 

Premija:

tuščio dict , str ir tuple :

 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
ответ дан Chiheb Nexus 02 дек. '17 в 22:48 2017-12-02 22:48

Pabandykite:

 if list: #Not empty else: #Empty 

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

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