2015-06-16 29 views
5

stumbled khi một cái gì đó hơi bối rối hiện nay trong khi viết một số unittests:Tại sao lát [: -0] trở lại danh sách trống bằng Python

blah = ['a', 'b', 'c'] 
blah[:-3] # [] 
blah[:-2] # ['a'] 
blah[:-1] # ['a', 'b'] 
blah[:-0] # [] 

có thể không cho cuộc sống của tôi hiểu tại sao blah[:-0] # [] phải là trường hợp , mẫu chắc chắn dường như gợi ý rằng nó phải là ['a', 'b', 'c']. Ai có thể giúp đỡ một số ánh sáng trên lý do tại sao đó là trường hợp? Đã không thể tìm thấy đề cập đến trong tài liệu như là lý do tại sao đó là trường hợp.

+0

- chỉ đơn giản có nghĩa là đếm ngược để tìm điểm bắt đầu. Giống như '[: -2]' đưa ra một danh sách chứa 2 phần tử cuối cùng, '[: -0]' đưa ra một danh sách chứa 0 phần tử cuối cùng. – mehtunguh

+2

'[: -2]' cho một 'danh sách' chứa tất cả các phần tử _except_ hai phần tử cuối cùng. – TigerhawkT3

Trả lời

11

-00 và một lát cắt từ đầu số list bao gồm chỉ mục 0 không bao gồm là số trống list.

+0

Thảo luận ngắn gọn '-0' là '0', bạn phải nhớ rằng trình biên dịch đang đánh giá các thuật ngữ khi nó phân tích cú pháp, và vì vậy khi nó thấy '-0', nó kết thúc bằng cách giữ '0'. – bmhkim

+0

Đó là toàn bộ lực đẩy của "' -0' là '0'". Không cần phải nhớ cùng một điều hai lần. – TigerhawkT3

5

Python không xử lý -0 bất kỳ khác biệt nào từ 0.

blah[:0] 

có nghĩa là tất cả các thành phần có nhưng không bao gồm phần tử đầu tiên. Đây là một danh sách trống, và blah[:-0] là chính xác điều tương tự.

Bạn có thể kiểm tra điều này bằng cách kiểm tra rằng

blah[0:] 

là toàn bộ danh sách, bắt đầu từ phần tử đầu tiên.

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