Cắt một mảng là khái niệm cắt ra – hoặc cắt ra – một phần của mảng. Làm thế nào để bạn làm điều này trong Python? Tôi sẽ chỉ cho bạn cách thực hiện trong bài viết này.
Nếu bạn thích xem nội dung video để bổ sung cho việc đọc của mình, đây cũng là phiên bản video của bài viết này.
Mảng là gì?
Mảng là một cấu trúc dữ liệu cho phép bạn lưu trữ nhiều mục cùng kiểu dữ liệu theo thứ tự trong một biến cùng một lúc. Bạn có thể truy cập từng mục này theo chỉ mục của chúng (vị trí theo thứ tự).
Chúng hơi giống với danh sách trong Python, chỉ là danh sách cho phép bạn lưu trữ nhiều mục của các kiểu dữ liệu khác nhau. Ngoài ra, trong khi danh sách được tích hợp sẵn, mảng thì không.
Cách truy cập các giá trị trong một mảng bằng Python
Đây là cú pháp để tạo một mảng trong Python:
import array as arr
numbers = arr.array(typecode, [values])
Vì kiểu dữ liệu mảng không được tích hợp sẵn trong Python theo mặc định, bạn phải nhập nó từ array
mô-đun. Chúng tôi nhập mô-đun này dưới dạng arr
.
Sử dụng array
phương pháp của arr
chúng ta có thể tạo một mảng bằng cách chỉ định một typecode
(kiểu dữ liệu của các giá trị) và các giá trị được lưu trữ trong mảng.
Đây là bảng hiển thị các mã kiểu được chấp nhận:
đánh máy | Loại C | Loại trăn | Kích thước byte |
---|---|---|---|
‘b’ | ký tự | int | 1 |
‘B’ | ký tự không dấu | int | 1 |
‘bạn’ | wchar_t | Ký tự Unicode | 2 |
‘h’ | ký tắt | int | 2 |
‘H’ | ngắn không dấu | int | 2 |
‘tôi’ | ký int | int | 2 |
‘TÔI’ | int không dấu | int | 2 |
‘tôi’ | ký dài | int | 4 |
‘l’ | không dấu dài | int | 4 |
‘q’ | đã ký lâu dài | int | số 8 |
‘Q’ | không dấu lâu dài | int | số 8 |
‘f’ | trôi nổi | trôi nổi | 4 |
‘d’ | gấp đôi | trôi nổi | số 8 |
Mã đánh máy lấy từ tài liệu Python.
Đây là một mảng ví dụ trong Python:
import array as arr
numbers = arr.array('i', [1, 2, 3, 4, 5])
print(numbers[1])
# 2
Chúng tôi đã tạo một mảng các giá trị số nguyên từ 1 đến 5 tại đây. Chúng tôi cũng đã truy cập giá trị thứ hai bằng cách sử dụng dấu ngoặc vuông và chỉ mục của nó theo thứ tự, đó là 1.
Cách cắt một mảng trong Python
Giả sử bạn muốn cắt một phần của mảng này và gán phần đó cho một biến khác. Bạn có thể làm điều đó bằng cách sử dụng dấu hai chấm và dấu ngoặc vuông. Cú pháp trông như thế này:
array[start:stop:step]
Các start
chỉ mục chỉ định chỉ mục mà quá trình cắt bắt đầu từ đó. mặc định là .
Các end
chỉ mục chỉ định chỉ mục nơi quá trình cắt kết thúc (nhưng không bao gồm giá trị tại chỉ mục này). Mặc định là độ dài của mảng.
Các step
đối số chỉ định bước cắt. mặc định là 1.
Hãy xem một số ví dụ bao gồm các cách khác nhau trong đó các mảng có thể được cắt.
Cách cắt mà không có chỉ mục bắt đầu hoặc kết thúc
Khi bạn cắt mà không có một start
hoặc end
index, về cơ bản bạn sẽ nhận được toàn bộ bản sao của mảng:
import array as arr
numbers = arr.array('i', [1, 2, 3, 4, 5])
copy = numbers[:]
print(copy)
# array('i', [1, 2, 3, 4, 5])
Như bạn có thể thấy ở đây, chúng tôi có một bản sao của numbers
mảng.
Cũng đáng lưu ý rằng hành động cắt không ảnh hưởng đến mảng ban đầu. Với việc cắt, bạn chỉ “sao chép một phần” của mảng ban đầu.
Cách cắt với chỉ mục bắt đầu
Ví dụ: nếu bạn muốn cắt một mảng từ một giá trị bắt đầu cụ thể đến cuối mảng, đây là cách thực hiện:
import array as arr
numbers = arr.array('i', [1, 2, 3, 4, 5])
copy = numbers[2:]
print(copy)
# array('i', [3, 4, 5])
Bằng cách vượt qua 2:
trong ngoặc vuông, quá trình cắt bắt đầu từ chỉ mục 2 (giữ giá trị 3) cho đến hết mảng, như bạn có thể thấy trong kết quả.
Cách cắt với chỉ số kết thúc
Ví dụ: nếu bạn muốn cắt một mảng từ giá trị đầu tiên sang giá trị thứ ba, đây là cách thực hiện:
import array as arr
numbers = arr.array('i', [1, 2, 3, 4, 5])
copy = numbers[:3]
print(copy)
# array('i', [1, 2, 3])
Bằng cách vượt qua :3
trong ngoặc vuông, cắt lát bắt đầu từ index (theo mặc định, vì không được chỉ định) cho đến chỉ mục thứ ba mà chúng tôi đã chỉ định.
Như đã đề cập trước đó, việc cắt lát loại trừ giá trị ở chỉ mục thứ ba. Vì vậy, trong kết quả, như bạn tìm thấy trong copy
biến, các giá trị được trả về là từ chỉ mục thông qua chỉ số 2.
Cách cắt với chỉ mục bắt đầu và kết thúc
Nếu bạn muốn chỉ định điểm bắt đầu và điểm kết thúc của việc cắt lát thì sao? Đây là cách:
import array as arr
numbers = arr.array('i', [1, 2, 3, 4, 5])
copy = numbers[1:4]
print(copy)
# array('i', [2, 3, 4])
Bằng cách sử dụng một số, sau đó là dấu hai chấm, theo sau là một số trong dấu ngoặc vuông, bạn có thể chỉ định chỉ mục bắt đầu và chỉ mục kết thúc tương ứng.
Trong trường hợp của chúng tôi, chúng tôi đã sử dụng 1 và 4 như trong [1:4]
. Từ kết quả, bạn thấy rằng việc cắt lát bắt đầu từ giá trị tại chỉ mục 1 đó là 2
cho đến giá trị trước chỉ mục 4đó là 4
(ở chỉ số 3).
Làm thế nào để cắt với các bước
Khi bạn chỉ định một start
và end
chỉ số lần lượt là 1 và 5, việc cắt lát sẽ chọn các giá trị tại chỉ mục 1mục lục 2 (1 gia số so với chỉ mục trước đó), chỉ mục 3 (1 gia số so với chỉ mục trước đó) và chỉ mục 4 (và một gia số cho chỉ số trước đó).
Trong lát cắt này, một bước của 1 được sử dụng theo mặc định. Nhưng bạn có thể cung cấp một bước khác. Đây là cách:
import array as arr
numbers = arr.array('i', [1, 2, 3, 4, 5])
copy = numbers[1:4:2]
print(copy)
# array('i', [2, 4])
Bằng cách thêm một dấu hai chấm khác, bạn có thể chỉ định một bước. Vì vậy chúng tôi có [start:stop:step]
.
Trong ví dụ của chúng tôi, bắt đầu là 1kết thúc là 4 và bước là 2. Việc cắt lát bắt đầu từ giá trị tại chỉ mục 1, đó là 2thì giá trị tiếp theo sẽ ở chỉ mục trước đó cộng với bước, đó là 1 + 2
bằng 3. Giá trị tại chỉ số 3 là 4 để được thêm vào lát cắt. Chỉ số tiếp theo sẽ là 5 (3 + 2
) nhưng vì 5 vượt quá chỉ số dừng nên nó sẽ không được thêm vào lát cắt.
Như bạn có thể thấy trong mã, bản sao được cắt chỉ là 2 và 4.
Cách cắt lát với chỉ số bắt đầu và kết thúc âm
Các start
hoặc stop
các chỉ mục cũng có thể âm. Các chỉ mục phủ định được tính từ cuối mảng. Điều này có nghĩa là chỉ số âm là giá trị cuối cùng trong một mảng:
import array as arr
numbers = arr.array('i', [1, 2, 3, 4, 5])
print(numbers[-1])
# 5
Bằng cách sử dụng âm 1 ở đây, bạn sẽ thấy rằng 5 được trả về, đó là từ phần cuối của một mảng.
Với một biểu thức lát cắt như [-3:-1]
điều này có nghĩa là chỉ mục bắt đầu của -3 và chỉ số kết thúc của -1. Hãy xem cách nó hoạt động với mảng của chúng ta:
import array as arr
numbers = arr.array('i', [1, 2, 3, 4, 5])
copy = numbers[-3:-1]
print(copy)
# array('i', [3, 4])
Lát cắt bắt đầu từ chỉ mục -3 (là giá trị thứ ba tính từ cuối mảng, tức là 3) và dừng tại chỉ mục -1 (là giá trị cuối cùng trong mảng, tức là 5). Cắt lát không bao gồm giá trị cuối cùng nên chúng tôi có 3 và 4.
Kết hợp tiêu cực
start
chỉ số và tích cựcend
chỉ mục (hoặc ngược lại) sẽ không hoạt động vì bạn sẽ đi theo các hướng khác nhau cùng một lúc.
Làm thế nào để cắt với các bước tiêu cực
Bạn có thể sử dụng các bước âm, có nghĩa là các bước giảm dần cho việc cắt lát. Đây là một ví dụ:
import array as arr
numbers = arr.array('i', [1, 2, 3, 4, 5])
copy = numbers[2::-1]
print(copy)
# array('i', [3, 2, 1])
Ở đây, chúng tôi chỉ định điểm bắt đầu của chỉ mục 2không có kết thúc, và một bước của -1. Cắt ở đây sẽ bắt đầu từ chỉ mục 2 đó là 3. Các bước âm có nghĩa là giá trị tiếp theo trong lát cắt sẽ có chỉ số nhỏ hơn chỉ mục trước đó 1. Điều này có nghĩa là 2 - 1
đó là 1 vì vậy giá trị tại chỉ mục này, là 2 sẽ được thêm vào lát cắt.
Điều này tiếp tục đảo ngược cho đến khi nó đi đến cuối mảng là chỉ mục . Mảng được cắt lát dẫn đến các giá trị 3, 2 và 1.
làm gì [::-1]
bần tiện?
Bạn đã từng thấy biểu thức này ở đâu trong Python trước đây chưa? Vâng, đây là những gì nó có nghĩa là: không có start
chỉ mục được chỉ định, cũng không phải là một end
chỉ số, chỉ là một bước tiêu cực của -1.
Các start
chỉ mục mặc định là vì vậy bằng cách sử dụng -1 bước, việc cắt lát sẽ chứa các giá trị tại các chỉ mục sau: -1 (0 - 1
), -2 (-1 - 1
), -3 (-2 - 1
), -4 (-3 - 1
) và -5 (-4 - 1
). Khá nhiều bản sao đảo ngược của mảng.
Đây là mã cho nó:
import array as arr
numbers = arr.array('i', [1, 2, 3, 4, 5])
copy = numbers[::-1]
print(copy)
# array('i', [5, 4, 3, 2, 1])
Như bạn có thể thấy, đây là một cách đơn giản để đảo ngược một mảng.
kết thúc
Trong bài viết này, chúng ta đã xem xét ngắn gọn cách khai báo mảng trong Python, cách truy cập các giá trị trong một mảng và cả cách cắt – hoặc cắt – một phần của mảng bằng cách sử dụng dấu hai chấm và dấu ngoặc vuông.
Chúng tôi cũng đã học cách cắt lát hoạt động với các bước và chỉ số bắt đầu và dừng tích cực/tiêu cực.
Bạn có thể tìm hiểu thêm về mảng tại đây: Hướng dẫn mảng Python – Xác định, Chỉ mục, Phương thức.