2012-12-10 22 views
6

thể trùng lặp:
Why does “[] == False” evaluate to False when “if not []” succeeds?Danh sách trống có bằng Không hoặc không?

Tôi mới vào python theo hành ternary của python

>>> 'true' if True else 'false' true 
    true 

tôi đang kỳ vọng vào bên dưới đầu ra mã như [] vì [ ] không bằng None

>>> a=[] 
>>> a==None 
False 
>>> a if a else None 
None 

lời cầu khẩn đúng nếu tôi đã sai lầm

Cảm ơn HEMA

+3

Xem tài liệu cho [Truth Kiểm tra Giá trị] (http://docs.python.org/2/ library/stdtypes.html # truth-value-testing). –

+0

Câu trả lời hay hơn tại https://stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty – zerocog

Trả lời

10

Danh sách trống rỗng, [], là không bằng None.

Tuy nhiên, có thể đánh giá là False - điều này có nghĩa là giá trị "trung thực" là False. (Xem nguồn trong các ý kiến ​​còn lại trên OP.)

Bởi vì điều này,

>>> [] == False 
False 
>>> if []: 
...  print "true!" 
... else: 
...  print "false!" 
false! 
+12

Cách dễ nhất để đặt nó là '[]! = False' nhưng' bool ([]) == Sai'. –

+1

@Lattyware Đúng, đó là cách ngắn gọn nhất, nhưng tôi nghĩ rằng một người mới Python có thể gặp rắc rối theo mặc dù. – jdotjdot

+1

Ồ, thực sự, tôi không đề nghị bạn loại bỏ lời giải thích tuyệt vời của bạn, chỉ cần đặt nó theo một cách khác. –

0

None là trường hợp duy nhất của NoneType và thường được sử dụng để biểu thị sự vắng mặt của giá trị. Điều gì xảy ra trong ví dụ của bạn là danh sách trống, được lấy trong bối cảnh boolean, đánh giá là False, điều kiện không thành công, do đó nhánh khác được thực thi. Các thông dịch viên làm điều gì đó dọc theo dòng:

>>> a if a else None 
    [] if [] else None 
    [] if False else None 
None 

Dưới đây là một cuộc thảo luận hữu ích về None: not None test in Python

Các vấn đề liên quan