Bijvoorbeeld, indien geslaagd voor het volgende:
a = []
Hoe controleer ik of a
leeg is?
Antwoord 1, autoriteit 100%
if not a:
print("List is empty")
De impliciete booleannessvan de lege list
is nogal pythonisch.
Antwoord 2, autoriteit 21%
De pythonische manier om dit te doen is van de PEP 8-stijlgids( waarbij Ja“aanbevolen” betekent en Neebetekent “niet aanbevolen”):
Gebruik voor reeksen (strings, lijsten, tupels) het feit dat lege reeksen onwaar zijn.
Yes: if not seq: if seq: No: if len(seq): if not len(seq):
Antwoord 3, autoriteit 14%
Ik geef er expliciet de voorkeur aan:
if len(li) == 0:
print('the list is empty')
Op deze manier is het 100% duidelijk dat li
een reeks (lijst) is en we willen de grootte ervan testen. Mijn probleem met if not li: ...
is dat het de verkeerde indruk wekt dat li
een booleaanse variabele is.
Antwoord 4
len()
1) bewerkingvoor Python-lijsten, strings, dicts en sets. Python houdt intern het aantal elementen in deze containers bij.
JavaScript heeft een soortgelijk idee van waarheid/falsy.
Antwoord 5
Ik had geschreven:
if isinstance(a, (list, some, other, types, i, accept)) and not a:
do_stuff
die op -1 werd gestemd. Ik weet niet zeker of dat komt omdat lezers bezwaar maakten tegen de strategie of dachten dat het antwoord niet nuttig was zoals gepresenteerd. Ik zal net doen alsof het het laatste was, aangezien — wat ook telt als “pythonisch” — dit de juiste strategie is. Tenzij je al hebt uitgesloten of bereid bent gevallen aan te pakken waarin a
bijvoorbeeld False
is, heb je een test nodig die restrictiever is dan alleen if not a:
. Je zou zoiets als dit kunnen gebruiken:
if isinstance(a, numpy.ndarray) and not a.size:
do_stuff
elif isinstance(a, collections.Sized) and not a:
do_stuff
de eerste test is een reactie op het antwoord van @Mike hierboven. De derde regel kan ook worden vervangen door:
elif isinstance(a, (list, tuple)) and not a:
als u alleen instanties van bepaalde typen (en hun subtypen) wilt accepteren, of met:
elif isinstance(a, (list, tuple)) and not len(a):
Je kunt wegkomen zonder de expliciete typecontrole, maar alleen als de omringende context je al verzekert dat a
een waarde is van de typen die je aankan, of als je zeker weet die typen die u niet kunt verwerken, zullen fouten opleveren (bijv. een TypeError
als u len
aanroept voor een waarde waarvoor deze niet is gedefinieerd) die u wel voorbereidt ermee omgaan. Over het algemeen lijken de “pythonische” conventies deze laatste kant op te gaan. Knijp erin als een eend en laat hem een DuckError opvoeden als hij niet weet hoe hij moet kwaken. Je moet echter nog steeds nadenkenover wat voor soort aannames je doet, en of de zaken die je niet goed kunt afhandelen, echt op de juiste plaatsen zullen mislukken. De Numpy-arrays zijn een goed voorbeeld waarbij blindelings vertrouwen op len
of de booleaanse typecast niet precies doet wat je verwacht.
Antwoord 6
Uit documentatieover het testen van de waarheidswaarde:
Alle andere waarden dan hier worden vermeld, worden als True
beschouwd
None
False
- nul van elk numeriek type, bijvoorbeeld
0
,0.0
,0j
. - Elke lege volgorde, bijvoorbeeld
''
,()
,[]
. - Elke lege mapping, bijvoorbeeld,
{}
. - Instances van door de gebruiker gedefinieerde klassen, als de klasse een
__bool__()
of__len__()
-methode, wanneer die methode de integer nul of boolwaardeFalse
.
Zoals te zien is, is lege lijst []
Falsy , dus doen wat er aan een booleaanse waarde wordt gedaan, klinkt het meest efficiënt:
if not a:
print('"a" is empty!')
7
Ik geef de voorkeur aan het volgende:
if a == []:
print "The list is empty."
8
Hier zijn een paar manieren waarop u kunt controleren of een lijst leeg is:
a = [] #the list
1) De vrij eenvoudige pythonische manier:
if not a:
print("a is empty")
In Python, lege containers zoals lijsten, tuples, sets, dicts, variabelen enz. worden gezien als False
. Men kan de lijst eenvoudig behandelen als een predicaat (die een Booleaanse waarde retourneert). En een True
Waarde zou aangeven dat het niet leeg is.
2) Een veel expliciete manier: met behulp van de len()
om de lengte te vinden en te controleren of het gelijk is aan 0
:
if len(a) == 0:
print("a is empty")
3) of vergelijking met een anonieme lege lijst:
if a == []:
print("a is empty")
4)Nog een dommemanier om dit te doen is het gebruik van exception
en iter()
:
try:
next(iter(a))
# list has elements
except StopIteration:
print("Error: a is empty")
Antwoord 9
Methode 1 (voorkeur):
if not a :
print ("Empty")
Methode 2:
if len(a) == 0 :
print( "Empty" )
Methode 3:
if a == [] :
print ("Empty")
Antwoord 10
Je kunt zelfs proberen om bool()
op deze manier te gebruiken. Hoewel het minder leesbaar is, is het toch een beknopte manier om dit uit te voeren.
a = [1,2,3];
print bool(a); # it will return True
a = [];
print bool(a); # it will return False
Ik hou van deze manier, want de checklist is leeg of niet.
Heel handig en nuttig.
Antwoord 11
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])
Het is soms goed om afzonderlijk te testen op None
en op leegte, aangezien dit twee verschillende toestanden zijn. De bovenstaande code produceert de volgende uitvoer:
list is None
list is empty
list has 3 elements
Hoewel het niets waard is dat None
verval is. Dus als u geen test wilt scheiden voor None
-ness, hoeft u dat niet te doen.
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])
produceert verwachte
list is empty
list is empty
list has 3 elements
12
Veel antwoorden zijn gegeven, en veel van hen zijn redelijk goed. Ik wilde gewoon toevoegen dat de cheque
not a
passeert ook voor None
en andere soorten lege structuren. Als u echt wilt controleren op een lege lijst, kunt u dit doen:
if isinstance(a, list) and len(a)==0:
print("Received an empty list")
13
Als u wilt controleren of een lijst leeg is:
l = []
if l:
# do your stuff.
Als u wilt controleren of alle waarden in de lijst leeg zijn. Het is echter True
voor een lege lijst:
l = ["", False, 0, '', [], {}, ()]
if all(bool(x) for x in l):
# do your stuff.
Als u beide gevallen samen wilt gebruiken:
def empty_list(lst):
if len(lst) == 0:
return False
else:
return all(bool(x) for x in l)
Nu kunt u gebruiken:
if empty_list(lst):
# do your stuff.
14
Geïnspireerd worden door de oplossing van @ Dubiousjim, stel ik voor om een extra algemene controle van te gebruiken of het IT IT-ITERABELIG is
import collections
def is_empty(a):
return not a and isinstance(a, collections.Iterable)
Opmerking: een tekenreeks wordt beschouwd als iespunt. – Voeg and not isinstance(a,(str,unicode))
Als u wilt dat de lege tekenreeks
moet worden uitgesloten
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
15
We kunnen een eenvoudige indien anders gebruiken:
item_list=[]
if len(item_list) == 0:
print("list is empty")
else:
print("list is not empty")
16
Controleer of een lijst leeg is of niet, dan kunt u twee volgende manieren gebruiken. Maar vergeet niet dat we de weg moeten vermijden om expliciet te controleren op een type reeks (het is een
less pythonic
way):
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".
De tweede manier is een
more pythonic
manier. Deze methode is een impliciete manier van controleren en heeft veel meer de voorkeur dan de vorige.
def enquiry(list1):
if not list1:
return True
else:
return False
# ––––––––––––––––––––––––––––––––
list1 = []
if enquiry(list1):
print ("The list is Empty")
else:
print ("The list isn't empty")
# Result: "The list is Empty"
Hopelijk helpt dit.
Antwoord 17
print('not empty' if a else 'empty')
een beetje praktischer:
a.pop() if a else None
en meest pure versie:
if a: a.pop()
Antwoord 18
Gebruik gewoon is_empty() of maak een functie zoals:-
def is_empty(any_structure):
if any_structure:
print('Structure is not empty.')
return True
else:
print('Structure is empty.')
return False
Het kan worden gebruikt voor elke data_structure zoals een lijst, tupels, woordenboek en nog veel meer. Hierdoor kun je het vaak aanroepen met alleen is_empty(any_structure)
.
Antwoord 19
Een eenvoudige manier is om te controleren of de lengte gelijk is aan nul.
if len(a) == 0:
print("a is empty")
Antwoord 20
Vanaf python3 kun je
a == []
om te controleren of de lijst leeg is
EDIT: Dit werkt ook met python2.7..
Ik weet niet zeker waarom er zoveel ingewikkelde antwoorden zijn.
Het is vrij duidelijk en duidelijk
Antwoord 21
De waarheidswaarde van een lege lijst is False
terwijl deze voor een niet-lege lijst True
is.
Antwoord 22
Wat me hier bracht is een speciale use-case: ik wilde eigenlijk een functieom me te vertellen of een lijst leeg is of niet. Ik wilde vermijden om mijn eigen functie te schrijven of hier een lambda-expressie te gebruiken (omdat het leek alsof het eenvoudig genoeg zou moeten zijn):
foo = itertools.takewhile(is_not_empty, (f(x) for x in itertools.count(1)))
En natuurlijk is er een heel natuurlijke manier om het te doen:
foo = itertools.takewhile(bool, (f(x) for x in itertools.count(1)))
Natuurlijk, nietgebruik bool
in if
(dwz if bool(L):
) omdat het geïmpliceerd is. Maar voor de gevallen waarin “is niet leeg” expliciet nodig is als functie, is bool
de beste keuze.