Bir listenin bo┼č olup olmad─▒─č─▒n─▒ nas─▒l kontrol ederim?


Al─▒nan cevaba git


├ľrne─čin, a┼ča─č─▒dakileri ge├žerse:

 a = []
 

a Bo┼č olup olmad─▒─č─▒n─▒ nas─▒l kontrol edebilirim ?


3235









Cevap say─▒s─▒n─▒ say: 28






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

Bo┼č bo┼č ├Ârt├╝l├╝ booleanl─▒─č─▒ kullanmak list olduk├ža pitoniktir .


4951







Bunu yapmak i├žin pitonik yol PEP 8 tarz─▒ k─▒lavuzdand─▒r ( Evet , ÔÇťtavsiye edilirÔÇŁ ve Hay─▒r ÔÇťtavsiye edilmezÔÇŁ anlam─▒na gelir):

Diziler i├žin (dizeler, listeler, tuples) bo┼č dizilerin yanl─▒┼č oldu─ču ger├že─čini kullan─▒n.

 Yes: if not seq:
     if seq:

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

1084







A├ž─▒k├ža tercih ederim:

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

Bu ┼čekilde li , bir s─▒ra (liste) oldu─ču % 100 a├ž─▒kt─▒r ve boyutunu test etmek istiyoruz. Benim sorunum , bir boole de─či┼čkeni if not li: ... olan yanl─▒┼č izlenim vermesi li .


695







Bu, "python test empty array" ve benzeri sorgular i├žin ilk google isabetinin yan─▒ s─▒ra, di─čer insanlar da soruyu sadece listelerin ├Âtesinde genelle┼čtiriyor gibi g├Âr├╝n├╝yor, bu y├╝zden bir├žok insan i├žin farkl─▒ bir dizi t├╝r├╝ i├žin bir uyar─▒ ekleyece─čimi d├╝┼č├╝nd├╝m. kullanabilir.

NumPy dizileri i├žin di─čer y├Ântemler ├žal─▒┼čm─▒yor

NumPy dizileriyle dikkatli olman─▒z gerekir, ├ž├╝nk├╝ list s veya di─čer standart kaplar i├žin iyi ├žal─▒┼čan di─čer y├Ântemler NumPy dizileri i├žin ba┼čar─▒s─▒z olur. Nedenini a┼ča─č─▒da a├ž─▒kl─▒yorum ama k─▒saca tercih edilen y├Ântemi kullanmak size .

"Pythonic" yolu ├žal─▒┼čm─▒yor: 1. B├Âl├╝m

"Pythonic" yolu NumPy dizileriyle ba┼čar─▒s─▒z oluyor, ├ž├╝nk├╝ NumPy diziyi bir bool s dizisine d├Ân├╝┼čt├╝rmeye if x ├žal─▒┼č─▒yor bool ve bir kerede toplam ger├žek de─čer i├žin t├╝m bu de─čerleri bir kerede de─čerlendirmeye ├žal─▒┼č─▒yor . Ama bu hi├ž mant─▒kl─▒ gelmiyor, yani 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" yolu ├žal─▒┼čm─▒yor: 2. B├Âl├╝m

Ancak en az─▒ndan yukar─▒daki durum size bunun ba┼čar─▒s─▒z oldu─čunu s├Âyl├╝yor. Tam olarak bir elemente sahip bir NumPy dizisine sahipseniz, bir hata almaman─▒z if anlam─▒nda "├žal─▒┼čacakt─▒r". Bununla birlikte, e─čer bir eleman 0 (veya 0.0 , veya False ...) if olursa , ifade yanl─▒┼č sonu├žlanacakt─▒r False :

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

Ama a├ž─▒k├ža x var ve bo┼č de─čil! Bu sonu├ž istedi─čin gibi de─čil.

Kullanarak len beklenmedik sonu├žlar verebilir

├ľrne─čin,

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

dizide s─▒f─▒r eleman olsa bile, 1 de─čerini d├Ând├╝r├╝r.

Numpythonic yolu

A├ž─▒kland─▒─č─▒ gibi scipy SSS , size bir NumPy dizi var biliyorum her durumda do─čru y├Ântem kullan─▒m─▒ etmektir 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 Bir NumPy dizisi ya da ba┼čka bir ┼čey olup olmad─▒─č─▒ndan emin de─čilseniz, bu yakla┼č─▒m─▒ @dubiousjim'in her t├╝r i├žin do─čru testin kullan─▒ld─▒─č─▒ndan emin olmak i├žin kulland─▒─č─▒ cevapla birle┼čtirebilirsiniz . ├çok "pitonik" de─čil, ama NumPy'nin kas─▒tl─▒ olarak pitonisiteyi en az─▒ndan bu anlamda k─▒rd─▒─č─▒ ortaya ├ž─▒kt─▒.

Giri┼čin bo┼č olup olmad─▒─č─▒n─▒ kontrol etmekten daha fazlas─▒n─▒ yapman─▒z ve indeksleme veya matematik i┼člemleri gibi di─čer NumPy ├Âzelliklerini kullan─▒yorsan─▒z, giri┼či bir NumPy dizisi olmaya zorlamak muhtemelen daha etkilidir (ve kesinlikle daha yayg─▒nd─▒r) . Bunu h─▒zl─▒ bir ┼čekilde yapmak i├žin birka├ž g├╝zel fonksiyon vard─▒r - en ├Ânemlisi numpy.asarray . Bu, giri┼činizi al─▒r, zaten bir dizi ise hi├žbir ┼čey yapmaz veya bir liste, kay─▒t vb. Varsa giri┼činizi bir diziye sarar ve iste─če ba─čl─▒ olarak se├žti─činize d├Ân├╝┼čt├╝r├╝r dtype . B├Âylece olabildi─čince h─▒zl─▒d─▒r ve giri┼čin bir NumPy dizisi oldu─čunu varsayman─▒z─▒ sa─člar. Genellikle ayn─▒ ad─▒ kullan─▒r─▒z, ├ž├╝nk├╝ bir diziye d├Ân├╝┼čt├╝rme i┼člemi ge├žerli kapsam─▒n d─▒┼č─▒nda kalmayacak :

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

Bu, x.size kontrol├╝n bu sayfada g├Ârd├╝─č├╝m her durumda ├žal─▒┼čmas─▒n─▒ sa─člayacakt─▒r .


291


2012-02-21





Bir listenin bo┼č olup olmad─▒─č─▒n─▒ kontrol etmenin en iyi yolu

├ľrne─čin, a┼ča─č─▒dakileri ge├žerse:

 a = []
 

Bo┼č olup olmad─▒─č─▒n─▒ nas─▒l kontrol edebilirim?

K─▒sa cevap:

Listeyi bir boole ba─člam─▒na yerle┼čtirin (├Ârne─čin, bir if veya while ifadesiyle). False Bo┼č olup olmad─▒─č─▒n─▒ test eder, True aksi takdirde. ├ľrne─čin:

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

Kuruma ─░tiraz

https://www.python.org/dev/peps/pep-0008/%23programming-recommendations#programming-recommendationsPython'un standart k├╝t├╝phanesindeki Python kodu i├žin resmi Python stil rehberi olan PEP 8 ┼č├Âyle diyor:

Diziler i├žin (dizeler, listeler, tuples) bo┼č dizilerin yanl─▒┼č oldu─ču ger├že─čini kullan─▒n.

 Yes: if not seq:
     if seq:

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

Standart k├╝t├╝phane kodunun m├╝mk├╝n oldu─ču kadar performans ve do─čru olmas─▒n─▒ beklemeliyiz. Ama neden bu b├Âyle ve neden bu rehberli─če ihtiyac─▒m─▒z var?

a├ž─▒klama

Python'da yeni olan deneyimli programc─▒lardan bu gibi bir kod s─▒k├ža g├Âr├╝yorum:

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

Ve tembel dillerin kullan─▒c─▒lar─▒ bunu yapmaya ba┼člam─▒┼č olabilir:

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

Bunlar kendi dillerinde do─črudur. Ve bu Python'da bile anlamsal olarak do─črudur.

Ancak Pythonic'i d├╝┼č├╝nm├╝yoruz ├ž├╝nk├╝ Python bu semanti─či do─črudan liste nesnesinin aray├╝z├╝nde boole zorlama yoluyla destekliyor.

G├Ânderen docs (ve not bo┼č listenin ├Âzellikle dahil, [] ):

Varsay─▒lan olarak, bir nesne, nesneyle ├ža─čr─▒ld─▒─č─▒nda, d├Ând├╝ren bir y├Ântemi veya s─▒f─▒r __bool__() d├Ând├╝ren bir y├Ântemi tan─▒mlamad─▒─č─▒ s├╝rece, true olarak kabul edilir . Yanl─▒┼č say─▒lan yerle┼čik nesnelerin ├žo─ču: False __len__()

  • false olarak tan─▒mlanan sabitler: None ve False .
  • herhangi bir say─▒sal t├╝r s─▒f─▒r: 0 , 0.0 , 0j , Decimal(0) , Fraction(0, 1)
  • Bo┼č diziler ve koleksiyonlar: '' , () , [] , {} , set() , range(0)

Ve veri modeli belgeleri:

object.__bool__(self)

Do─čruluk de─čeri testini ve yerle┼čik operasyonu uygulamaya ├ža─č─▒rd─▒ bool() ; geri d├Ânmeli False veya True . Bu y├Ântem tan─▒mlanmad─▒─č─▒nda, tan─▒mlanm─▒┼čsa __len__() ├ža─čr─▒l─▒r ve sonucu s─▒f─▒r de─čilse nesne do─čru say─▒l─▒r. Bir s─▒n─▒f ne tan─▒mlarsa ne __len__() de tan─▒mlarsa __bool__() , t├╝m ├Ârnekleri do─čru say─▒l─▒r.

ve

object.__len__(self)

Yerle┼čik i┼člevi uygulamak i├žin ├ža─čr─▒ld─▒ len() . Nesnenin uzunlu─čunu, tamsay─▒> = 0 d├Ând├╝rmelidir. Ayr─▒ca, bir __bool__() y├Ântemi tan─▒mlamam─▒┼č ve __len__() y├Ântemi s─▒f─▒r d├Ând├╝ren bir nesnenin bir Boolean ba─člam─▒nda yanl─▒┼č oldu─ču kabul edilir.

Yani bunun yerine:

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

veya bu:

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

Bunu yap:

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

Pythonic olan─▒ yapmak genellikle performansta kar┼č─▒l─▒─č─▒n─▒ verir:

├ľdedi mi? (E┼čde─čer bir i┼člemi ger├žekle┼čtirmek i├žin daha az zaman─▒n daha iyi oldu─čunu unutmay─▒n :)

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

├ľl├žek i├žin, i┼čte i┼člevi ├ža─č─▒rman─▒n ve yukar─▒da kullan─▒lan bo┼čluk kontrollerinin maliyetinden ├ž─▒kartabilece─činiz bo┼č bir liste olu┼čturman─▒n ve geri getirmenin maliyeti:

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

Biz g├Âr├╝yoruz , ya yerle┼čik fonksiyonu ile uzunlu─ču i├žin kontrol len ile kar┼č─▒la┼čt─▒r─▒ld─▒─č─▒nda 0 ya bo┼č bir listeye kar┼č─▒ kontrol ediyor ├žok yeterli performans─▒ belgelendi─či gibi dilin yerle┼čik s├Âzdizimi kullan─▒larak daha.

Niye ya?

─░├žin len(a) == 0 ├žek:

─░lk Python'un len g├Âlgeli olup olmad─▒─č─▒n─▒ g├Ârmek i├žin k├╝releri kontrol etmesi gerekir .

Ard─▒ndan, fonksiyonu ├ža─č─▒rmal─▒, y├╝klemeli 0 ve e┼čitlik kar┼č─▒la┼čt─▒rmas─▒n─▒ Python'da yapmal─▒d─▒r (C ile de─čil):

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

Ve [] == [] bunun i├žin gereksiz bir liste olu┼čturmas─▒ ve sonra Python'un sanal makinesinde (C'nin aksine) kar┼č─▒la┼čt─▒rma i┼člemini yapmas─▒ gerekiyor.

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

"Pythonic" yolu, listenin uzunlu─ču nesne ├Ârne─či ba┼čl─▒─č─▒nda ├Ânbelle─če al─▒nd─▒─č─▒ndan ├žok daha basit ve h─▒zl─▒ bir denetimdir:

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

C kayna─č─▒ndan gelen kan─▒tlar ve belgeler

PyVarObject

Bu alan PyObject ekleyen bir uzant─▒s─▒d─▒r ob_size . Bu, yaln─▒zca uzunluk kavram─▒ olan nesneler i├žin kullan─▒l─▒r. Bu t├╝r Python / C API'sinde s─▒kl─▒kla g├Âr├╝nmez. PyObject_VAR_HEAD Makronun geni┼člemesi ile tan─▒mlanan alanlara kar┼č─▒l─▒k gelir .

Include / listobject.h i├žindeki c kayna─č─▒ndan :

 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
 

Bunu ara┼čt─▒rmaktan zevk ald─▒m ve cevaplar─▒m─▒ de─čerlendirmek i├žin ├žok zaman harc─▒yorum. Bir ┼čeyi d─▒┼čar─▒da b─▒rakt─▒─č─▒m─▒ d├╝┼č├╝n├╝yorsan─▒z, l├╝tfen bir yorumda bana bildirin.


156







Ger├žek de─čer testinde bo┼č bir listenin yanl─▒┼č oldu─ču kabul edilir ( python belgelerine bak─▒n ):

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

@Daren Thomas

EDIT: Bo┼č listeyi False (Yanl─▒┼č) olarak test etmeye kar┼č─▒ bir ba┼čka nokta: Polimorfizmden ne haber? Bir listenin bir liste olmas─▒na ba─čl─▒ olmaman─▒z gerekir. Sadece bir ├Ârdek gibi atmal─▒ - hi├žbir ├Â─čeye sahip olmad─▒─č─▒nda, ├Ârdek koleksiyonunuzu '' Yanl─▒┼č '' olarak atmaya nas─▒l ba┼člayacaks─▒n─▒z?

Ki┼čisel duckCollection uygulamal─▒d─▒r __nonzero__ veya __len__ bir e─čer ├Âyleyse: sorunsuz ├žal─▒┼čacakt─▒r.


133







Patrick'in (kabul edilen) cevab─▒ do─čru: if not a: bunu yapman─▒n do─čru yolu. Harley Holcombe'nin cevab─▒ , bunun PEP 8 tarz─▒ k─▒lavuzda oldu─ču do─čru. Ancak cevaplar─▒n hi├žbiri a├ž─▒klama yapm─▒yor, deyimi izlemenin neden iyi bir fikir oldu─čunu - ki┼čisel olarak bunun yeterince a├ž─▒k olmad─▒─č─▒n─▒ ya da Ruby kullan─▒c─▒lar─▒na ya da her neyse kafa kar─▒┼čt─▒r─▒c─▒ olmad─▒─č─▒n─▒ bulsan─▒z bile.

Python kodu ve Python toplulu─ču, ├žok g├╝├žl├╝ deyimlere sahiptir. Bu deyimleri takip etmek, Python'da deneyimli herkes i├žin kodunuzu okumay─▒ kolayla┼čt─▒r─▒r. Bu deyimleri ihlal etti─činde, bu g├╝├žl├╝ bir i┼čaret.

Bu do─črudur if not a: gelen bo┼č listeleri ayr─▒m yapmaz None Falsey ile skalerler g├Ârevi g├Ârmek veya say─▒sal 0 veya bo┼č dizilerini veya bo┼č kullan─▒c─▒ taraf─▒ndan olu┼čturulan koleksiyon t├╝rleri veya bo┼č kullan─▒c─▒ taraf─▒ndan olu┼čturulan de─čil olduk├ža toplama t├╝rleri veya tek eleman NumPy dizi De─čerler vb. Bazen bunun a├ž─▒k olmas─▒ ├Ânemlidir. Ve bu durumda, neyle ilgili net olmak istedi─činizi biliyorsunuz , b├Âylece tam olarak bunun i├žin test edebilirsiniz. ├ľrne─čin, if not a and a is not None: "Hi├žbiri d─▒┼č─▒nda bir ┼čey falsey" if len(a) != 0: anlam─▒na gelirken , "yaln─▒zca bo┼č diziler" anlam─▒na gelir ve bir dizinin yan─▒ s─▒ra herhangi bir ┼čey burada bir hatad─▒r "vb. Tam olarak ne test etmek istedi─činizi test etmenin yan─▒ s─▒ra, okuyucuya bu testin ├Ânemli oldu─čunu g├Âsterir.

Ancak, a├ž─▒k bir ┼čeyiniz olmad─▒─č─▒nda if not a: , okuyucuyu yan─▒ltmaktan ba┼čka bir ┼čey yoktur . Olmad─▒─č─▒nda ├Ânemli bir ┼čeyi i┼čaret ediyorsun. (Ayr─▒ca kodu daha az esnek veya daha yava┼č veya neyse veya daha az ├Ânemli hale getiriyor olabilirsiniz, ama hepsi daha az ├Ânemli.) Ve okuyucuyu al─▒┼čkanl─▒kla yanl─▒┼č y├Ânlendirirseniz, o zaman bir ayr─▒m yapman─▒z gerekti─činde fark edilmeden ge├žecektir ├ž├╝nk├╝ kodun her taraf─▒nda "a─člayan kurt" vard─▒n.


97







Neden hi├ž kontrol etmiyorsun?

Hi├ž kimse listeyi ilk etapta test etmeniz gereklili─čini sorgulam─▒┼č gibi g├Âr├╝nm├╝yor . Ba┼čka bir ba─člam sa─člamad─▒─č─▒n─▒z i├žin, bu kontrol├╝ ilk etapta yapman─▒z gerekmeyebilece─čini ancak Python'daki liste i┼člemeyi bilmedi─činizi hayal edebiliyorum.

En pitonik yolun hi├ž kontrol etmemek, sadece listeyi i┼člemek oldu─čunu savunuyorum . Bu ┼čekilde bo┼č veya dolu olsun do─čru olan─▒ yapacak.

 a = []

for item in a:
    <do something with item>

<rest of code>
 

Bu herhangi i├žeri─čini ele yarar─▒ vard─▒r bir bo┼čluk i├žin belirli bir ├žek ihtiya├ž duymaz,. E─čer bir bo┼č, ba─č─▒ml─▒ blok y├╝r├╝tmek olmaz ve terc├╝man sonraki sat─▒ra yoluyla d├╝┼čecek.

Diziyi ger├žekten bo┼čluk i├žin kontrol etmeniz gerekiyorsa, di─čer cevaplar yeterlidir.


67







len() Python listeleri, dizeleri, dikte ve k├╝meleri i├žin bir O (1) i┼člemidir . Python dahili olarak bu kaplardaki elementlerin say─▒s─▒n─▒ takip eder.

JavaScript benzer bir hakikat / falsy kavram─▒na sahiptir .


64







Yazd─▒m:

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

-1 oy verildi. Bunun okuyucular stratejiye itiraz etti─či ya da cevab─▒n sunuldu─ču gibi yard─▒mc─▒ olmad─▒─č─▒n─▒ d├╝┼č├╝nd├╝─č├╝ i├žin emin de─čilim. ─░kincisiymi┼č gibi yapaca─č─▒m, ├ž├╝nk├╝ --- "pitonik" olarak say─▒lan her ┼čey --- bu do─čru strateji. Daha ├Ânce reddetmediyseniz veya a ├Ârne─čin davalar─▒ ele almaya haz─▒r olmad─▒─č─▒n─▒z s├╝rece, False sadece oldu─čundan daha k─▒s─▒tlay─▒c─▒ bir s─▒nava ihtiyac─▒n─▒z var if not a: . B├Âyle bir ┼čey kullanabilirsiniz:

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

ilk test yukar─▒da @ Mike'─▒n cevab─▒na cevap olarak verilmi┼čtir. ├ť├ž├╝nc├╝ sat─▒r da ile de─či┼čtirilebilir:

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

Yaln─▒zca belirli t├╝rlerin (ve alt t├╝rlerinin) ├Ârneklerini kabul etmek istiyorsan─▒z veya:

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

A├ž─▒k t├╝r kontrol├╝ olmadan ka├žabilirsiniz, ancak yaln─▒zca ├ževreleyen i├žerik size bunu a haz─▒rlamaya haz─▒r oldu─čunuz t├╝rlerin bir de─čeri oldu─čunu garanti ediyorsa veya kullanmaya haz─▒r olmad─▒─č─▒n─▒z t├╝rlerin devam etti─činden eminseniz i┼člemek i├žin haz─▒r oldu─čunuz hatalar─▒ (├Ârne─čin, tan─▒ms─▒z oldu─ču bir de─čeri TypeError ararsan─▒z) y├╝kseltmek len i├žin. Genel olarak, "pythonic" s├Âzle┼čmeleri bu son yoldan gider gibi g├Âr├╝n├╝yor. ├ľrdek gibi s─▒k─▒n ve nas─▒l yenilece─čini bilmiyorsa bir ├ľrdek Ezici yeti┼čtirmesine izin verin. Hala zorunda d├╝┼č├╝nmek hakk─▒nda ne t├╝r varsay─▒mlar sen yapma olsa ve d├╝zg├╝n ger├žekten i┼člemek i├žin haz─▒r de─čilsin do─čru yerlere d─▒┼čar─▒ hata olacak durumlarda olmad─▒─č─▒na. Numpy dizileri, sadece k├Âr bir ┼čekilde g├╝venmenin len ya da boole t├╝revinin tam olarak bekledi─činiz ┼čeyi yapamayabilece─či iyi bir ├Ârnektir .


38







G├Ânderen belgelere do─čruluk de─čeri testlere:

Burada listelenenler d─▒┼č─▒ndaki t├╝m de─čerler g├Âz ├Ân├╝nde bulundurulur True

  • None
  • False
  • herhangi bir say─▒sal t├╝r s─▒f─▒r, ├Ârne─čin 0 , 0.0 , 0j .
  • bo┼č bir s─▒ra, ├Ârne─čin, '' , () , [] .
  • ├Ârne─čin herhangi bir bo┼č haritalama {} .
  • kullan─▒c─▒ tan─▒ml─▒ s─▒n─▒flar─▒n ├Ârnekleri, e─čer s─▒n─▒f bir __bool__() veya __len__() metodu tan─▒mlarsa , bu metod tamsay─▒ s─▒f─▒r veya bool de─čerini d├Ând├╝rd├╝─č├╝nde False .

G├Âr├╝ld├╝─č├╝ ├╝zere, bo┼č liste [] oldu─čunu falsy , en verimli bir boolean de─čer seslere yap─▒lmas─▒ ne yap─▒yor bu y├╝zden:

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

27







Bir listenin bo┼č olup olmad─▒─č─▒n─▒ kontrol etmenin birka├ž yolu:

 a = [] #the list
 

1) Olduk├ža basit pythonic yolu:

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

Python'da listeler, tuples, k├╝meler, diktler, de─či┼čkenler vb . Gibi bo┼č kaplar olarak g├Âr├╝l├╝r False . Biri basit├že listeyi bir ├Âng├Âr├╝ olarak g├Ârebilir ( bir Boolean de─čeri d├Ând├╝rerek ). Ve bir True de─čer bo┼č olmad─▒─č─▒n─▒ g├Âsterir.

2) ├çok a├ž─▒k bir ┼čekilde: len() uzunlu─ču bulmak i├žin kullanmak ve ona e┼čit olup olmad─▒─č─▒n─▒ kontrol etmek i├žin 0 :

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

3) Veya isimsiz bir bo┼č listeyle kar┼č─▒la┼čt─▒rmak:

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

4) Bir ba┼čka hen├╝z sa├žma do yolu kullan─▒yor exception ve iter() :

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

23







Y├Ântem 1 (Tercih edilen):

 if not a : 
   print ("Empty") 
 

Y├Ântem 2:

 if len(a) == 0 :
   print( "Empty" )
 

Y├Ântem 3:

 if a == [] :
  print ("Empty")
 

18







A┼ča─č─▒dakileri tercih ederim:

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

17







 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 ─░ki farkl─▒ durum oldu─ču i├žin bo┼člu─ču ayr─▒ ayr─▒ test etmek ve ayr─▒ ayr─▒ yapmak bazen iyidir . Yukar─▒daki kod a┼ča─č─▒daki ├ž─▒kt─▒y─▒ ├╝retir:

 list is None 
list is empty 
list has 3 elements
 

Buna ra─čmen None sahte olan hi├žbir ┼čeye de─čmez. Bu y├╝zden, None iyilik testini ay─▒rmak istemiyorsan─▒z , bunu yapmak zorunda de─čilsiniz.

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

beklenen ├╝retir

 list is empty
list is empty
list has 3 elements
 

10







Bir├žok cevap verildi ve bir├žo─ču olduk├ža iyi. Sadece ├žek eklemek istedim

 not a
 

ayr─▒ca None ve di─čer bo┼č yap─▒lar i├žin ge├žerli olacakt─▒r. Ger├žekten bo┼č bir liste olup olmad─▒─č─▒n─▒ kontrol etmek istiyorsan─▒z, ┼čunlar─▒ yapabilirsiniz:

 if isinstance(a, list) and len(a)==0:
    print("Received an empty list")
 

7







e─čer ba┼čka bir basit kullanabiliriz:

 item_list=[]
if len(item_list) == 0:
    print("list is empty")
else:
    print("list is not empty")
 

6







Bool () y├Ântemini kullanarak bile deneyebilirsiniz

     a = [1,2,3];
    print bool(a); # it will return True
    a = [];
    print bool(a); # it will return False
 

Kontrol listesi bo┼č olsun ya da olmas─▒n bu ┼čekilde seviyorum.

├çok kullan─▒┼čl─▒ ve kullan─▒┼čl─▒.


4







@ Dubiousjim'in ├ž├Âz├╝m├╝nden ilham alarak, yinelenebilir bir ┼čey olup olmad─▒─č─▒na dair ek bir genel kontrol kullanmay─▒ ├Âneriyorum

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

Not: Bir dize yinelenebilir olarak kabul edilir. - and not isinstance(a,(str,unicode)) Bo┼č dizginin hari├ž tutulmas─▒n─▒ istiyorsan─▒z ekleyin.

├ľl├žek:

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

4







Python3'ten itibaren kullanabilirsiniz

 a == []
 

Listenin bo┼č olup olmad─▒─č─▒n─▒ kontrol etmek i├žin

EDIT: Bu da python2.7 ile ├žal─▒┼č─▒r ..

Neden bu kadar ├žok karma┼č─▒k cevap oldu─čundan emin de─čilim. Olduk├ža a├ž─▒k ve anla┼č─▒l─▒r


4







 print('not empty' if a else 'empty')
 

biraz daha pratik:

 a.pop() if a else None
 

ve en saf s├╝r├╝m:

 if a: a.pop() 
 

4







Basit bir ┼čekilde uzunlu─ču kontrol etmek s─▒f─▒ra e┼čittir.

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

3







Basit├že is_empty () kullan─▒n veya a┼ča─č─▒daki gibi i┼člev yap─▒n: -

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

Bir liste, kay─▒tlar, s├Âzl├╝k ve daha fazlas─▒ gibi herhangi bir veri yap─▒s─▒ i├žin kullan─▒labilir. Bununla, sadece kullanarak bir├žok kez arayabilirsiniz is_empty(any_structure) .


2







Bo┼č bir listenin ger├žek de─čeri, bo┼č False olmayan bir liste i├žin oldu─ču gibidir True .


1







Bir listenin bo┼č olup olmad─▒─č─▒n─▒ kontrol etmek i├žin a┼ča─č─▒daki iki yolu kullanabilirsiniz. Ancak unutmay─▒n, bir diziyi veya listeyi a├ž─▒k├ža kontrol etmekten ka├ž─▒nmal─▒y─▒z (bu bir less pythonic yoldur):

 def Enquiry(list1): 
    if len(list1) == 0: 
        return 0
    else: 
        return 1

# ÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇô

list1 = [] 

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

# Result: "The list is Empty".
 

─░kinci yol more pythonic birdir. Bu y├Ântem, ├Ârt├╝k bir kontrol y├Ântemidir ve ├Âncekinden ├žok daha fazla tercih edilir.

 def Enquiry(list1): 
    if not list1: 
        return 1
    else: 
        return 0

# ÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇôÔÇô

list1 = [] 

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

# Result: "The list is Empty"
 

Bu yard─▒mc─▒ olur umar─▒m.


1







A┼ča─č─▒dakileri kontrol edin: len(list) == 0 d├Âner: True


1







Beni buraya getiren ├Âzel bir durum: Bana asl─▒nda bir listenin bo┼č olup olmad─▒─č─▒n─▒ s├Âyleyen bir i┼člev istedim . Kendi i┼člevimi yazmaktan veya burada bir lambda ifadesi kullanmaktan ka├ž─▒nmak istedim (├ž├╝nk├╝ yeterince basit olmal─▒ gibi g├Âr├╝n├╝yordu):

 foo = itertools.takewhile(is_not_empty, (f(x) for x in itertools.count(1)))
 

Ve elbette, bunu yapman─▒n ├žok do─čal bir yolu var:

 foo = itertools.takewhile(bool, (f(x) for x in itertools.count(1)))
 

Tabii ki, do not kullanmak bool i├žinde if (yani if bool(L): o ima ├ž├╝nk├╝). Ancak, "bo┼č de─čil" durumunun a├ž─▒k├ža bir i┼člev olarak gerekli oldu─ču bool durumlar i├žin en iyi se├žimdir.


1







Listenin bo┼č olup olmad─▒─č─▒n─▒ kontrol etmek istiyorsan─▒z;

 l = []
if l:
    # do your stuff.
 

Hava durumunu kontrol etmek istiyorsan─▒z listedeki t├╝m de─čerler bo┼čtur. Ancak bo┼č liste i├žin Do─čru olacakt─▒r.

 l = ["", False, 0, '', [], {}, ()]
if all(bool(x) for x in l):
    # do your stuff.
 

Her iki davay─▒ birlikte kullanmak istiyorsan─▒z.

 def empty_list(lst):
    if len(lst) == 0:
        return false
    else:
        return all(bool(x) for x in l)
 

┼×imdi kullanabilirsiniz:

 if empty_list(lst):
    # do your stuff.
 

1



─░lgili yay─▒nlar


Dizinin bo┼č olup olmad─▒─č─▒n─▒ kontrol edin. JS [yinelenen]

EditText'in bo┼č olup olmad─▒─č─▒n─▒ kontrol edin. [kapal─▒]

Python'da metnin ÔÇťbo┼čÔÇŁ (bo┼čluklar, sekmeler, yeni sat─▒rlar) olup olmad─▒─č─▒ nas─▒l kontrol edilir?

IEnumerable'─▒n bo┼č veya bo┼č olup olmad─▒─č─▒n─▒ kontrol etme

Klas├Âr bo┼č mu (.NET) h─▒zl─▒ca nas─▒l kontrol edilir?

handlerbars.js listenin bo┼č olup olmad─▒─č─▒n─▒ kontrol edin

Nesnenin bo┼č olup olmad─▒─č─▒n─▒ kontrol etmek, ng-show ile ├žal─▒┼č─▒r fakat kontrol├Ârden de─čil mi?

Dizinin bo┼č mu yoksa bo┼č mu oldu─čunu kontrol edin

Listenin bo┼č olup olmad─▒─č─▒n─▒ kontrol edin C# [kapal─▒]

Alan─▒n bo┼č ya da bo┼č mysql olup olmad─▒─č─▒n─▒ kontrol etmek

Etiketle ilgili di─čer sorular [python]


Python'da bir dize alt dizesini nas─▒l bulabilirim?

Apache Camel tam olarak nedir?

Git'te bir dosyay─▒ ay─▒rman─▒n neden iki yolu var?

Git'teki eski bir taahh├╝d├╝n zaman damgas─▒n─▒ nas─▒l de─či┼čtirebilirim?

Std :: string'i int'ye nas─▒l d├Ân├╝┼čt├╝rebilirim?

Aray├╝z├╝m├╝n G├Ârev'i d├Ând├╝rmesi gerekiyorsa, i┼člem yap─▒lmayan bir uygulaman─▒n en iyi yolu nedir?

Objective-C'deki #import ve #include aras─▒ndaki fark nedir?

Birden fazla csv dosyas─▒n─▒ pandalara i├že aktar─▒n ve bir DataFrame'e birle┼čtirin

Magento'da basit bir 'Merhaba D├╝nya' mod├╝l├╝n├╝ nas─▒l olu┼čturabilirim?

Python Gelecekte be┼č dakika boyunca unix zaman damgas─▒ olu┼čturun