2013-04-15 18 views
17

Jak mogę się dowiedzieć, czy lista jest pusta bez użycia polecenia" nie "?
Oto, co starałem:Sprawdź, czy lista jest pusta, bez użycia polecenia `not`.

if list3[0] == []: 
    print "No matches found" 
else: 
    print list3 

Jestem bardzo początkujący więc wybaczcie jeśli robię głupie błędy.

+3

Co z 'not'? – halex

+1

Jest to zadanie szkolne i nie powinienem teraz o tym wiedzieć. Wiem o tym tylko dlatego, że wcześniej szukałem odpowiedzi. – user2240288

+0

możliwy duplikat [Najlepszy sposób sprawdzenia, czy lista jest pusta] (http://stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty) –

Odpowiedz

53

w kolejności preferencji:

# Good 
if not list3: 

# Okay 
if len(list3) == 0: 

# Ugly 
if list3 == []: 

# Silly 
try: 
    next(iter(list3)) 
    # list has elements 
except StopIteration: 
    # list is empty 

Jeśli masz zarówno jeśli i innego można również zmieniać kolejność postępowania:

if list3: 
    # list has elements 
else: 
    # list is empty 
+0

Rzeczywiście, puste listy to' Fałsz' w kontekście boolowskim. Nie ma potrzeby jawnego testowania dla 'len()'. –

+2

Należy zauważyć, że pod maską "1" i "2" naprawdę robią to samo przez większość czasu. –

+0

@ sr2222 Przepraszam. Usunięto komentarz z powodu błędu składni w Pythonie 2.x. Mogłoby to zrobić 'None, jeśli list3 else print (" No matches found ")' w Pythonie 3.x, chociaż. – Aya

1

Sprawdź jego długość.

l = [] 
print len(l) == 0 
+0

Dzięki, sprawdzeniu jego długości działa :) – user2240288

6

się dowiedzieć, czy lista jest puste, testując "prawdę":

>>> bool([]) 
False 
>>> bool([0])  
True 

W drugim przypadku 0 jest fałszywe, ale lista [0] ma wartość True, ponieważ zawiera coś. (Jeśli chcesz sprawdzić listę dla zawierający wszystkie falsey rzeczy, użyj all lub any: any(e for e in li) jest Prawda, jeśli każdy element w li jest truthy.)

Skutkuje to tym idiomu:

if li: 
    # li has something in it 
else: 
    # optional else -- li does not have something 

if not li: 
    # react to li being empty 
# optional else... 

Według PEP 8, to jest właściwy sposób:

• For sequences, (strings, lists, tuples), use the fact that empty sequences are false.

Yes: if not seq: 
    if seq: 

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

przetestować, czy lista ma specyficzny indeks istniejący przy użyciu try:

>>> try: 
... li[3]=6 
... except IndexError: 
... print 'no bueno' 
... 
no bueno 

Więc może chcesz odwrócić kolejność kodu do tego:

if list3: 
    print list3 
else: 
    print "No matches found" 
-1

tutaj:

if len(list3) == 0: 
    print "No matches found"