2012-11-13 38 views
6

Tôi chỉ đến qua mã python sau đó bối rối cho tôi một chút:'Kết quả [:: - 1]' có nghĩa là gì?

res = self.result[::-1].encode('hex') 

Các mã hóa thứ là khá rõ ràng, nó phải được thể hiện dưới dạng giá trị hex. Tuy nhiên, những gì hiện self.result này [:: - 1] có nghĩa là, đặc biệt là các dấu hai chấm?

Trả lời

9

Nó đại diện cho 'lát cắt' để lấy từ kết quả. Phần tử đầu tiên là vị trí bắt đầu, phần tử thứ hai là kết thúc (không bao gồm) và thứ ba là bước. Giá trị trống trước/sau dấu hai chấm cho biết bạn hoặc là bắt đầu từ đầu (s[:3]) hoặc kéo dài đến cuối (s[3:]). Bạn có thể bao gồm các con số thực tế ở đây là tốt, nhưng để chúng ra khi có thể là thành ngữ hơn.

Ví dụ:

In [1]: s = 'abcdefg' 

Return slice của chuỗi bắt đầu ngay từ đầu và dừng lại ở vị trí số 2:

In [2]: s[:3] 
Out[2]: 'abc' 

Return slice của chuỗi bắt đầu tại ba vị trí chỉ mục và mở rộng đến cuối:

In [3]: s[3:] 
Out[3]: 'defg' 

Trả lại phần của chuỗi bắt đầu ở cuối và lùi lại đằng sau một yếu tố tại một thời điểm:

In [4]: s[::-1] 
Out[4]: 'gfedcba' 

Return slice của chuỗi có chứa tất cả các yếu tố khác:

In [5]: s[::2] 
Out[5]: 'aceg' 

Tất cả họ đều có thể được sử dụng kết hợp với nhau cũng. Ở đây, chúng tôi trả lại miếng trả về tất cả các yếu tố khác với giá từ vị trí số 6 và đi đến vị trí số 2 (lưu ý rằng s[:2:-2] sẽ nhiều thành ngữ, nhưng tôi đã chọn một số kỳ lạ của các chữ cái :)):

In [6]: s[6:2:-2] 
Out[6]: 'ge' 

Phần tử bước xác định các phần tử cần trả lại. Trong ví dụ của bạn, các -1 cho biết nó sẽ bước lùi qua mục, một phần tử tại một thời điểm.

+0

Tuyệt vời, điều đó rất dễ hiểu. Vì vậy, về cơ bản này không có gì khác hơn là các hoạt động danh sách được sử dụng ở đây! – Patrick

+0

@Patrick Bạn nhận được nó :) Bạn sẽ thấy nó thường xuyên với các chuỗi/danh sách và thậm chí nó có thể được sử dụng để gán trong trường hợp danh sách (ví dụ: 'l = ['one', 'two', three ']; l [: 2] = ['đã thay đổi'] '). Hy vọng nó giúp! – RocketDonkey

2

Đó là thành ngữ phổ biến đảo ngược danh sách.

a = ['a', 'b', 'c', 'd'] 
b = a[::-1] 
print b 

['d', 'c', 'b', 'a'] 

Bạn có thể đọc về 'lát mở rộng' here.

+3

Lựa chọn từ không may, nó không đảo ngược một danh sách! 'a.reverse()' đảo ngược danh sách 'a'. 'a [:: - 1]' trả về một bản sao đảo ngược 'a'. – Junuxx

+1

Trong khi đúng, từ ngữ của tôi là cố ý; sự phân biệt đó có thể sẽ trở nên khó hiểu hơn đối với người mới bắt đầu, chúng thường được phục vụ tốt hơn bằng cách được trình bày với sự đơn giản hóa và làm việc với sự trừu tượng cho đến khi nó làm điều gì đó bất ngờ. Bài tập thay đổi và khả năng biến đổi là những bài học cho một ngày khác. – kreativitea