Mảng là một tập hợp các mục được lưu trữ tại các vị trí bộ nhớ liền kề. Ý tưởng là lưu trữ nhiều mục cùng loại với nhau. Điều này giúp tính toán vị trí của từng phần tử dễ dàng hơn bằng cách thêm một giá trị bù vào giá trị cơ sở, tức là vị trí bộ nhớ của phần tử đầu tiên của mảng (thường được biểu thị bằng tên của mảng).
Các bài viết liên quan:
Để đơn giản, chúng ta có thể nghĩ về một dãy cầu thang trong đó trên mỗi bậc thang được đặt một giá trị (giả sử một trong những người bạn của bạn). Tại đây, bạn có thể xác định vị trí của bất kỳ người bạn nào của mình bằng cách chỉ cần biết số bước họ đang đi. Mảng có thể được xử lý bằng Python bởi một mô-đun có tên là mảng. Chúng có thể hữu ích khi chúng ta chỉ phải thao tác với một giá trị kiểu dữ liệu cụ thể. Người dùng có thể coi danh sách là mảng. Tuy nhiên, người dùng không thể hạn chế loại phần tử được lưu trữ trong danh sách. Nếu bạn tạo mảng bằng mô-đun mảng, tất cả các phần tử của mảng phải cùng kiểu.
Tạo một mảng
Mảng trong Python có thể được tạo bằng cách nhập mô-đun mảng. array(data_type, value_list) được sử dụng để tạo một mảng với kiểu dữ liệu và danh sách giá trị được chỉ định trong các đối số của nó.
#khai báo thư viện array với tên arr import array as arr # tạo 1 mảng array với interger a = arr.array('i', [1, 2, 3]) # xuất ra màn hình mảng print ("array : ", end =" ") #duyệt phần từ trong mảng với range 0-3 for i in range (0, 3): print (a[i], end =" ") print() # tạo mảng kiểu double b = arr.array('d', [2.5, 3.2, 3.3]) # xuất ra mảng mới tạo print ("array mới : ", end =" ") #duyệt phần từ trong mảng với range 0-3 for i in range (0, 3): print (b[i], end =" ")
Sự phức tạp để tạo mảng:
- Độ phức tạp của thời gian: O(1)
- Độ phức tạp không gian: O(n)
Một số kiểu dữ liệu được đề cập dưới đây sẽ giúp tạo ra một mảng các kiểu dữ liệu khác nhau.
Thêm các phần tử vào một mảng
Các phần tử có thể được thêm vào Mảng bằng cách sử dụng hàm insert() tích hợp sẵn. Chèn được sử dụng để chèn một hoặc nhiều phần tử dữ liệu vào một mảng. Dựa trên yêu cầu, một phần tử mới có thể được thêm vào đầu, cuối hoặc bất kỳ chỉ mục nào của mảng. append() cũng được sử dụng để thêm giá trị được đề cập trong các đối số của nó ở cuối mảng.
import array as arr # array với kiểu interger a = arr.array('i', [1, 2, 3]) print ("Array trước khi chèn : ", end =" ") #duyệt từng phần tử với range(0,3) for i in range (0, 3): #xuất ra màn hình print (a[i], end =" ") print() #insert số 4 a.insert(1, 4) print ("Array sau khi chèn : ", end =" ") #duyệt từng phần tử for i in (a): print (i, end =" ") print() # array với kiểu float b = arr.array('d', [2.5, 3.2, 3.3]) print ("Array trước khi chèn : ", end =" ") for i in range (0, 3): print (b[i], end =" ") print() # chèn phần tử sử dụng append() b.append(4.4) print ("Array sau khi chèn : ", end =" ") #duyệt từng phần tử for i in (b): print (i, end =" ") print()
Sự phức tạp khi thêm các phần tử vào Mảng:
- Độ phức tạp về thời gian: O(1)/O(n) ( O(1) – để chèn các phần tử vào cuối mảng, O(n) – để chèn các phần tử vào đầu mảng và vào toàn bộ mảng
- Không gian phụ trợ: O(1)
Truy cập các phần tử từ Mảng
Để truy cập các mục mảng tham khảo số chỉ mục. Sử dụng toán tử chỉ mục [ ] để truy cập một mục trong mảng. Chỉ số phải là một số nguyên.
import array as arr # array với kiểu int a = arr.array('i', [1, 2, 3, 4, 5, 6]) # truy cập phần tử của array print("element là: ", a[0]) # truy cập phần tử của array print("element là: ", a[3]) # array với kiểu float b = arr.array('d', [2.5, 3.2, 3.3]) # truy cập phần tử của array print("element là: ", b[1]) # truy cập phần tử của array print("element là: ", b[2])
Sự phức tạp khi truy cập các phần tử trong Mảng:
- Độ phức tạp của thời gian: O(1)
- Không gian phụ trợ: O(1)
Loại bỏ các phần tử khỏi mảng
Có thể xóa các phần tử khỏi mảng bằng cách sử dụng hàm remove() tích hợp nhưng Lỗi sẽ phát sinh nếu phần tử không tồn tại trong tập hợp. Phương thức Remove() chỉ xóa một phần tử tại một thời điểm, để loại bỏ phạm vi phần tử, trình vòng lặp được sử dụng. hàm pop() cũng có thể được sử dụng để xóa và trả về một phần tử khỏi mảng, nhưng theo mặc định, hàm này chỉ xóa phần tử cuối cùng của mảng, để xóa phần tử khỏi một vị trí cụ thể của mảng, chỉ số của phần tử được truyền dưới dạng đối số cho phương thức pop().
Lưu ý – Phương thức xóa trong Danh sách sẽ chỉ xóa lần xuất hiện đầu tiên của phần tử được tìm kiếm.
import array #khởi tạo array với số iterger arr = array.array('i', [1, 2, 3, 1, 5]) # xuất ra mảng ban đầu print ("array ban đầu có giá trị: ", end ="") # duyệt mảng với ranger từ 0 đến 5 for i in range (0, 5): print (arr[i], end =" ") print ("\r") # sử dụng pop() để remove element vị trí index 2 print ("pop() : ", end ="") print (arr.pop(2)) # xuất ra mảng sau khi pop print ("array sau khi popping: ", end ="") # duyệt mảng for i in range (0, 4): print (arr[i], end =" ") print("\r") # sử dụng remove() để remove index 1 arr.remove(1) # xuất ra mang sau khi remove print ("array sau khi remove : ", end ="") for i in range (0, 3): print (arr[i], end =" ")
Sự phức tạp để loại bỏ các phần tử trong Mảng:
- Độ phức tạp về thời gian: O(1)/O(n) ( O(1) – để loại bỏ các phần tử ở cuối mảng, O(n) – để loại bỏ các phần tử ở đầu mảng và toàn bộ mảng
- Không gian phụ trợ: O(1)
Slice một mảng
Trong mảng Python, có nhiều cách để in toàn bộ mảng với tất cả các phần tử, nhưng để in một dải phần tử cụ thể từ mảng, chúng ta sử dụng thao tác Slice. Thao tác slice được thực hiện trên mảng bằng cách sử dụng dấu hai chấm (:). Để in các phần tử từ đầu đến một dải sử dụng [:Index], để in các phần tử từ cuối sử dụng [:-Index], để in các phần tử từ Chỉ mục cụ thể cho đến cuối sử dụng [index:], để in các phần tử trong một dải, sử dụng [ index Bắt đầu:index Kết thúc] và để in toàn bộ Danh sách bằng cách sử dụng thao tác slice, hãy sử dụng [:]. Hơn nữa, để in toàn bộ mảng theo thứ tự ngược lại, hãy sử dụng [::-1].
import array as arr # tạo một list l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #tạo một array a = arr.array('i', l) print("Array: ") #duyệt trong array for i in (a): print(i, end =" ") #sử dụng slice để cắt Sliced_array = a[3:8] print("\nSlicing từ vị trí 3 đến 8: ") print(Sliced_array) #sử dụng slice 5 đến hết Sliced_array = a[5:] print("\n slice từ vị trí 5 đến hết: ") print(Sliced_array) #slide tất cả element Sliced_array = a[:] print("\n slice tất cả các vị trí array: ") print(Sliced_array)
Tìm kiếm phần tử trong Array
Để tìm kiếm một phần tử trong mảng, chúng ta sử dụng phương thức index() tích hợp sẵn của python. Hàm này trả về chỉ mục của lần xuất hiện đầu tiên của giá trị được đề cập trong các đối số.
import array #khởi tạo array với số interger arr = array.array('i', [1, 2, 3, 1, 2, 5]) # in mảng ban đầu print ( "array ban đầu : ", end ="") #duyệt tất cả phần tử trong mảng for i in range (0, 6): print (arr[i], end =" ") print ("\r") # sử dụng hàm index() để tìm index của giá trị 2 print (" index đầu tiên của giá trị 2: ", end ="") print (arr.index(2)) # sử dụng hàm index() print ("index đầu tiên của giá trị 1 : ", end ="") print (arr.index(1))
Sự phức tạp khi tìm kiếm các phần tử trong Mảng:
- Độ phức tạp của thời gian: O(n)
- Không gian phụ trợ: O(1)
Cập nhật các phần tử trong một mảng
Để cập nhật một phần tử trong mảng, chúng ta chỉ cần gán lại một giá trị mới cho chỉ mục mong muốn mà chúng ta muốn cập nhật.
import array # khởi tạo một mảng interger arr = array.array('i', [1, 2, 3, 1, 2, 5]) # in các giá trị array khởi tạo print ("Array trước khi cập nhật : ", end ="") #duyệt mảng với range 0 đến 6 for i in range (0, 6): print (arr[i], end =" ") print ("\r") # cập nhật các element trong mảng arr[2] = 6 print("Array sau khi cập nhật : ", end ="") #duyệt mảng với range 0 đến 6 for i in range (0, 6): print (arr[i], end =" ") print() # cập nhật element trong mảng arr[4] = 8 print("Array sau khi cập nhật : ", end ="") for i in range (0, 6): print (arr[i], end =" ")