Toán tử cắt lát Python là gì?

Các câu trả lời ở trên không thảo luận về chuyển nhượng lát. Để hiểu phép gán lát cắt, thật hữu ích khi thêm một khái niệm khác vào nghệ thuật ASCII

                +---+---+---+---+---+---+
                | P | y | t | h | o | n |
                +---+---+---+---+---+---+
Slice position: 0   1   2   3   4   5   6
Index position:   0   1   2   3   4   5

>>> p = ['P','y','t','h','o','n']
# Why the two sets of numbers:
# indexing gives items, not lists
>>> p[0]
 'P'
>>> p[5]
 'n'

# Slicing gives lists
>>> p[0:1]
 ['P']
>>> p[0:2]
 ['P','y']

Một heuristic là, đối với một lát cắt từ 0 đến n, hãy nghĩ. "số 0 là điểm bắt đầu, hãy bắt đầu từ đầu và lấy n phần tử trong danh sách"

>>> p[5] # the last of six items, indexed from zero
 'n'
>>> p[0:5] # does NOT include the last item!
 ['P','y','t','h','o']
>>> p[0:6] # not p[0:5]!!!
 ['P','y','t','h','o','n']

Một phương pháp phỏng đoán khác là "đối với bất kỳ lát cắt nào, hãy thay phần đầu bằng số 0, áp dụng phương pháp phỏng đoán trước đó để lấy phần cuối của danh sách, sau đó đếm số đầu tiên sao lưu để loại bỏ các mục từ đầu"

>>> p[0:4] # Start at the beginning and count out 4 items
 ['P','y','t','h']
>>> p[1:4] # Take one item off the front
 ['y','t','h']
>>> p[2:4] # Take two items off the front
 ['t','h']
# etc.

Quy tắc đầu tiên của phép gán lát cắt là vì phép cắt lát trả về một danh sách, phép gán lát cắt yêu cầu một danh sách (hoặc có thể lặp lại khác)

>>> p[2:3]
 ['t']
>>> p[2:3] = ['T']
>>> p
 ['P','y','T','h','o','n']
>>> p[2:3] = 't'
Traceback (most recent call last):
  File "", line 1, in 
TypeError: can only assign an iterable

Quy tắc thứ hai của phép gán lát cắt, mà bạn cũng có thể thấy ở trên, là bất kỳ phần nào của danh sách được trả về bằng cách lập chỉ mục lát cắt, đó chính là phần được thay đổi khi gán lát cắt

>>> p[2:4]
 ['T','h']
>>> p[2:4] = ['t','r']
>>> p
 ['P','y','t','r','o','n']

Quy tắc thứ ba của phép gán lát là, danh sách được gán (có thể lặp lại) không nhất thiết phải có cùng độ dài;

>>> p = ['P','y','t','h','o','n'] # Start over
>>> p[2:4] = ['s','p','a','m']
>>> p
 ['P','y','s','p','a','m','o','n']

Phần khó nhất để làm quen là gán cho các lát trống. Sử dụng heuristic 1 và 2, thật dễ dàng để bạn lập chỉ mục cho một lát cắt trống

>>> p = ['P','y','t','h','o','n']
>>> p[0:4]
 ['P','y','t','h']
>>> p[1:4]
 ['y','t','h']
>>> p[2:4]
 ['t','h']
>>> p[3:4]
 ['h']
>>> p[4:4]
 []

Và sau đó khi bạn đã thấy điều đó, việc gán lát cho lát trống cũng có ý nghĩa

>>> p = ['P','y','t','h','o','n']
>>> p[2:4] = ['x','y'] # Assigned list is same length as slice
>>> p
 ['P','y','x','y','o','n'] # Result is same length
>>> p = ['P','y','t','h','o','n']
>>> p[3:4] = ['x','y'] # Assigned list is longer than slice
>>> p
 ['P','y','t','x','y','o','n'] # The result is longer
>>> p = ['P','y','t','h','o','n']
>>> p[4:4] = ['x','y']
>>> p
 ['P','y','t','h','x','y','o','n'] # The result is longer still

Lưu ý rằng, vì chúng tôi không thay đổi số thứ hai của lát cắt (4), các mục được chèn luôn xếp chồng lên nhau so với 'o', ngay cả khi chúng tôi đang gán cho lát trống. Vì vậy, vị trí cho phép gán lát cắt trống là phần mở rộng hợp lý của các vị trí cho phép gán lát cắt không rỗng

Lùi lại một chút, điều gì sẽ xảy ra khi bạn tiếp tục với quá trình bắt đầu đếm lát của chúng tôi?

________số 8_______

Với việc cắt lát, sau khi bạn hoàn thành, bạn đã hoàn thành; . Trong Python, bạn không nhận được bước tiến âm trừ khi bạn yêu cầu chúng một cách rõ ràng bằng cách sử dụng số âm

>>> p[5:3:-1]
 ['n','o']

Có một số hậu quả kỳ lạ đối với quy tắc "một khi bạn đã hoàn thành, bạn đã hoàn thành"

>>> p[5] # the last of six items, indexed from zero
 'n'
>>> p[0:5] # does NOT include the last item!
 ['P','y','t','h','o']
>>> p[0:6] # not p[0:5]!!!
 ['P','y','t','h','o','n']
0

Trên thực tế, so với việc lập chỉ mục, việc cắt Python có khả năng chống lỗi một cách kỳ lạ

>>> p[5] # the last of six items, indexed from zero
 'n'
>>> p[0:5] # does NOT include the last item!
 ['P','y','t','h','o']
>>> p[0:6] # not p[0:5]!!!
 ['P','y','t','h','o','n']
1

Điều này đôi khi có ích, nhưng nó cũng có thể dẫn đến hành vi hơi kỳ lạ

>>> p[5] # the last of six items, indexed from zero
 'n'
>>> p[0:5] # does NOT include the last item!
 ['P','y','t','h','o']
>>> p[0:6] # not p[0:5]!!!
 ['P','y','t','h','o','n']
2

Tùy thuộc vào ứng dụng của bạn, điều đó có thể. hoặc có thể không. là những gì bạn đã hy vọng ở đó


Dưới đây là nội dung câu trả lời ban đầu của tôi. Nó có ích cho nhiều người nên tôi không muốn xóa nó

Ví dụ về toán tử lát cắt trong python là gì?

Hàm Python slice() . đối tượng lát cắt này có thể được sử dụng để lấy phần phụ của bộ sưu tập . Ví dụ: nếu chúng ta muốn lấy hai phần tử đầu tiên từ phần tử thứ mười? .

làm gì

Vậy [. -1] có nghĩa là từ phần tử đầu tiên đến phần tử cuối cùng trong các bước của 1 theo thứ tự ngược lại . Nếu bạn có [bắt đầu. stop] nó giống như step=1.