2013-04-15 6 views
17

Làm cách nào để tìm hiểu xem danh sách có trống không sử dụng lệnh không?
Đây là những gì tôi đã cố gắng:Kiểm tra xem danh sách có trống không khi sử dụng lệnh `not`

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

tôi rất nhiều người mới bắt đầu để cho tôi xin lỗi nếu tôi làm sai lầm ngớ ngẩn.

+3

Có gì sai với 'not'? – halex

+1

Nó cho một nhiệm vụ của trường, và tôi không phải biết ngay bây giờ. Tôi chỉ biết về nó bởi vì tôi đã tìm kiếm câu trả lời trước đây. – user2240288

+0

có thể trùng lặp của [Cách tốt nhất để kiểm tra xem danh sách có trống không] (http://stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty) –

Trả lời

53

Trong thứ tự ưu tiên:

# 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 

Nếu bạn có cả một khi và một người khác bạn cũng có thể sắp xếp lại các trường hợp:

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

Thật vậy, các danh sách trống là' False' trong ngữ cảnh boolean. Không cần phải kiểm tra một cách rõ ràng cho 'len()'. –

+2

Cần lưu ý rằng dưới mui xe, '1' và' 2' thực sự đang làm điều tương tự hầu hết thời gian. –

+0

@ sr2222 Xin lỗi. Đã xóa nhận xét do lỗi cú pháp trong Python 2.x. Có thể làm 'None nếu list3 else print (" No matches found ")' trong Python 3.x, mặc dù. – Aya

1

Kiểm tra độ dài của nó.

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

Cảm ơn, kiểm tra độ dài của nó đã làm việc :) – user2240288

6

Bạn tìm hiểu xem một danh sách trống bằng cách kiểm tra 'chân lý' của nó:

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

Trong trường hợp thứ hai, 0 là False, nhưng danh sách [0] là True vì nó chứa một cái gì đó. (Nếu bạn muốn kiểm tra một danh sách để chứa tất cả mọi thứ falsey, sử dụng all hoặc any: any(e for e in li) là True nếu bất kỳ mục trong li là truthy.)

Điều này dẫn đến thành ngữ này:

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

Theo PEP 8, đây là cách thích hợp:

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

Bạn kiểm tra nếu một danh sách có một chỉ số cụ thể hiện bằng cách sử dụng try:

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

Vì vậy, bạn có thể muốn đảo ngược thứ tự của mã của bạn như thế này:

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

đây:

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