Phân bổ mảng Python

Điều quan trọng là phải hiểu cách Python triển khai các danh sách và cách chúng hoạt động, vì vậy chúng tôi có thể quyết định xem chúng có phải là bộ sưu tập phù hợp cho các giá trị của chúng tôi hay không

Các bộ sưu tập khác nhau có các đặc điểm hiệu suất khác nhau để đọc và viết

Chọn một bộ sưu tập phù hợp đảm bảo chúng tôi sẽ nhận được hiệu suất cần thiết cho một nhiệm vụ nhất định

Mảng là gì?

Theo truyền thống (trong C và các ngôn ngữ tương tự), mảng lưu trữ các giá trị cùng loại và lưu trữ chúng tuần tự trong bộ nhớ vật lý, cái này nối tiếp cái kia.

Phân bổ mảng Python

Cách bố trí bộ nhớ này làm cho các mảng được đọc nhanh vì chúng ta chỉ cần đọc một đoạn bộ nhớ theo trình tự và chúng ta không cần phải nhảy qua nhảy lại

Mảng cũng rất nhanh khi truy cập các mục theo chỉ mục - vì chúng ta có thể lấy địa chỉ bộ nhớ của một mục trong mảng bằng cách thực hiện phép tính số học đơn giản.

Phân bổ mảng Python

Theo truyền thống, chúng ta không thể thay đổi độ dài của mảng

Nếu chúng ta muốn thêm hoặc xóa các phần tử khỏi một mảng, chúng ta phải tạo một mảng mới và sao chép các giá trị vào đó

Tại sao?

Bởi vì bộ nhớ bổ sung mà chúng ta cần nằm ngay sau bộ nhớ của mảng và có thể đã bị chiếm dụng. Vì vậy, nếu chúng ta muốn thêm một mục vào mảng, chúng ta cần phân bổ một đoạn bộ nhớ mới đủ lớn cho tất cả các mục và sao chép tất cả các mục từ mảng cũ và viết mục mới của chúng ta vào đó

Vì vậy, bây giờ, khi chúng ta hiểu mảng là gì và nó hoạt động như thế nào, chúng ta có thể thảo luận về cách hoạt động của một danh sách trong Python

Cách danh sách hoạt động trong Python

Danh sách hoạt động như thế nào trong Python?

đến tài liệu Python thảo luận ngắn gọn về việc triển khai danh sách

Tài liệu cho biết danh sách là mảng có độ dài thay đổi

Mảng có độ dài thay đổi có nghĩa là độ dài của nó có thể thay đổi bằng cách thêm/chèn hoặc xóa các mục. Tính linh hoạt này là tốt, và có vẻ đơn giản từ bên ngoài

Tuy nhiên, trong nội bộ, Python vẫn phải phân bổ lại bộ nhớ và di chuyển các mục cho chúng tôi, vì vậy chúng tôi không phải làm điều đó. Nhưng nó vẫn cần phải xảy ra

Đó là lý do tại sao chèn vào mảng chậm. Hoặc thêm vào nó

Python áp dụng một số tính năng thông minh để giúp việc nối thêm nhanh hơn, như đã đề cập trong tài liệu.
Khi chúng ta thêm vào một danh sách, Python sẽ phân bổ nhiều bộ nhớ hơn mức cần thiết cho một danh sách. Sự phân bổ tổng thể này làm cho việc nối thêm nhanh hơn bởi vì khi chúng tôi nối thêm vào lần tới, một số bộ nhớ bổ sung đã được phân bổ và việc phân bổ và sao chép không cần phải thực hiện lại.

Phân bổ mảng Python

Và danh sách càng lớn thì càng có nhiều bộ nhớ Python được phân bổ (vì nó giả định rằng sẽ có nhiều phần bổ sung hơn)

import sys
numbers = []
sys.getsizeof(numbers)
# outputs: 56
# List allocates 56 bytes of memory

numbers.append(1)
sys.getsizeof(numbers)
# outputs: 88
# List now allocates 88 bytes, list had to be reallocated

numbers.append(2)
sys.getsizeof(numbers)
# outputs: 88
# List still allocates 88 bytes, no reallocation or copying happened

numbers.append(3)
sys.getsizeof(numbers)
# outputs: 88
# List still allocates 88 bytes, no reallocation or copying happened

# Let's add 10 more numbers
for n in range (10):
    numbers.append(n)

sys.getsizeof(numbers)
# outputs: 184

numbers.append(22)
sys.getsizeof(numbers)
# outputs:184
# List still allocates 184 bytes, no reallocation or copying happened

Liệt kê các con trỏ lưu trữ

Trước đây, chúng tôi đã đề cập rằng các mảng lưu trữ các giá trị cùng loại

Nhưng một danh sách không nhất thiết phải chứa các mục cùng loại. Làm sao vậy?

Lý do là danh sách của Python không lưu trữ các giá trị thực mà là các con trỏ (tham chiếu) tới chúng

Trong thế giới chuyển động vô cùng nhanh chóng, người ta cần các kỹ thuật mã hóa tháo vát có thể giúp lập trình viên tổng hợp các mã khổng lồ theo những cách đơn giản và thuận tiện nhất. Mảng là một trong những cấu trúc dữ liệu giúp bạn viết một số giá trị vào một biến duy nhất, do đó giảm bớt gánh nặng ghi nhớ một số lượng lớn các biến. Vì vậy, hãy tiếp tục và xem cách bạn có thể triển khai Mảng trong Python

Dưới đây là tổng quan về các chủ đề giải thích tất cả các khía cạnh liên quan đến mảng

  1. Tại sao nên sử dụng Mảng trong Python?
  2. Mảng là gì?
  3. Danh sách Python có giống như một Mảng không?
  4. Tạo một mảng
  5. Truy cập một phần tử
  6. Thao tác mảng cơ bản
  • Thêm/Thay đổi các phần tử của Array
  • nối
  • Xóa/Xóa phần tử khỏi Mảng
  • Vòng qua một mảng
  • cắt lát
Tại sao nên sử dụng Mảng trong Python?

Sự kết hợp của Mảng, cùng với Python có thể giúp bạn tiết kiệm rất nhiều thời gian. Như đã đề cập trước đó, mảng giúp bạn giảm kích thước tổng thể của mã, trong khi Python giúp bạn loại bỏ cú pháp có vấn đề, không giống như các ngôn ngữ khác. Ví dụ. Nếu bạn phải lưu trữ các số nguyên từ 1–100, bạn sẽ không thể nhớ rõ ràng 100 tên biến, do đó, bạn có thể lưu chúng dễ dàng bằng cách sử dụng một mảng

Bây giờ bạn đã nhận thức được tầm quan trọng của mảng trong Python, hãy cùng tìm hiểu chi tiết hơn về nó

Mảng là gì?

Mảng về cơ bản là một cấu trúc dữ liệu có thể chứa nhiều hơn một giá trị tại một thời điểm. Nó là một tập hợp hoặc một loạt các phần tử cùng loại được sắp xếp theo thứ tự

a=arr.array('d',[1.2,1.3,2.3])

Chúng ta có thể lặp qua các mục mảng một cách dễ dàng và tìm nạp các giá trị cần thiết bằng cách chỉ định số chỉ mục. Mảng cũng có thể thay đổi (có thể thay đổi), do đó, bạn có thể thực hiện các thao tác khác nhau theo yêu cầu

Bây giờ, luôn có một câu hỏi xuất hiện trong đầu chúng ta -

Danh sách Python có giống như một Mảng không?

Cấu trúc dữ liệu 'mảng' trong python lõi không hiệu quả hoặc đáng tin cậy. Do đó, khi chúng ta nói về mảng python, chúng ta thường có nghĩa là danh sách python

Tuy nhiên, python cung cấp Mảng Numpy là một lưới các giá trị được sử dụng trong Khoa học dữ liệu

Tạo một mảng

Mảng trong Python có thể được tạo sau khi nhập mô-đun mảng như sau -

→ nhập mảng dưới dạng arr

Hàm mảng (kiểu dữ liệu, danh sách giá trị) nhận hai tham số, tham số đầu tiên là kiểu dữ liệu của giá trị được lưu trữ và tham số thứ hai là danh sách giá trị. Kiểu dữ liệu có thể là bất cứ thứ gì như int, float, double, v.v. Vui lòng lưu ý rằng arr là tên bí danh và để dễ sử dụng. Bạn cũng có thể nhập mà không cần bí danh. Có một cách khác để nhập mô-đun mảng đó là -

→ từ nhập mảng *

Điều này có nghĩa là bạn muốn nhập tất cả các chức năng từ mô-đun mảng

Cú pháp sau đây được sử dụng để tạo một mảng

cú pháp

#when you import using arr alias
a=arr.array(data type,value list)

HOẶC LÀ

#when you import using *
a=array(data type,value list)

Thí dụ. a=mảng. mảng( ‘d’ , [1. 1 , 2. 1 ,3. 1] )

Ở đây, tham số đầu tiên là 'd' là kiểu dữ liệu tôi. e. float và các giá trị được chỉ định làm tham số tiếp theo

Ghi chú. Tất cả các giá trị được chỉ định thuộc loại float. Chúng ta không thể chỉ định giá trị của các kiểu dữ liệu khác nhau cho một mảng

Bảng sau đây cho bạn thấy các loại dữ liệu khác nhau và mã của chúng

Truy cập các phần tử mảng

Để truy cập các phần tử mảng, bạn cần chỉ định các giá trị chỉ số. Lập chỉ mục bắt đầu từ 0 chứ không phải từ 1. Do đó, số chỉ mục luôn nhỏ hơn 1 so với độ dài của mảng

cú pháp

Array_name[giá trị chỉ mục]

a=arr.array( 'd', [1.1 , 2.1 ,3.1] ) 
a[1]

đầu ra

2.1

Đầu ra được trả về là giá trị, hiện ở vị trí thứ hai trong mảng của chúng tôi là 2. 1

Bây giờ chúng ta hãy xem xét một số thao tác mảng cơ bản

Các phép toán mảng cơ bản

Có nhiều thao tác có thể được thực hiện trên các mảng như sau -

Tìm độ dài của một mảng

Độ dài của một mảng là số phần tử thực sự có mặt trong một mảng. Bạn có thể sử dụng chức năng len() để đạt được điều này. Hàm len() trả về một giá trị nguyên bằng số phần tử có trong mảng đó

cú pháp

→ len(array_name)

Thí dụ

a=arr.array('d', [1.1 , 2.1 ,3.1] ) 
len(a)

đầu ra

3

Điều này trả về giá trị là 3 bằng với số phần tử mảng

Thêm/Thay đổi các phần tử của Array

Chúng ta có thể thêm giá trị vào một mảng bằng cách sử dụng các hàm append(), extend() và insert (i,x)

Hàm append() được sử dụng khi chúng ta cần thêm một phần tử vào cuối mảng

Thí dụ

________số 8

Đầu ra –

array(‘d’, [1.1, 2.1, 3.1, 3.4])

Mảng kết quả là mảng thực tế với giá trị mới được thêm vào cuối của nó. Để thêm nhiều hơn một phần tử, bạn có thể sử dụng hàm extension(). Hàm này lấy một danh sách các phần tử làm tham số của nó. Nội dung của danh sách này là các phần tử sẽ được thêm vào mảng

Thí dụ

a=arr.array('d',[1.2,1.3,2.3])
0

Đầu ra –

#when you import using arr alias
a=arr.array(data type,value list)
0

Mảng kết quả sẽ chứa tất cả 3 phần tử mới được thêm vào cuối mảng

Tuy nhiên, khi bạn cần thêm một phần tử cụ thể vào một vị trí cụ thể trong mảng, có thể sử dụng hàm insert(i,x). Hàm này chèn phần tử vào chỉ mục tương ứng trong mảng. Nó nhận 2 tham số trong đó tham số đầu tiên là chỉ mục cần chèn phần tử và tham số thứ hai là giá trị

Thí dụ

#when you import using arr alias
a=arr.array(data type,value list)
1

Đầu ra –

#when you import using arr alias
a=arr.array(data type,value list)
2

Mảng kết quả chứa giá trị 3. 8 ở vị trí thứ 3 trong mảng

Mảng cũng có thể được hợp nhất bằng cách thực hiện nối mảng

nối mảng

Bất kỳ hai mảng nào cũng có thể được nối bằng ký hiệu +

Thí dụ

#when you import using arr alias
a=arr.array(data type,value list)
3

Đầu ra -

#when you import using arr alias
a=arr.array(data type,value list)
4

Kết quả mảng c chứa các phần tử nối của mảng a và b

Bây giờ, hãy xem cách bạn có thể loại bỏ hoặc xóa các mục khỏi một mảng

Xóa/Xóa phần tử của mảng

Các phần tử của mảng có thể được gỡ bỏ bằng phương thức pop() hoặc remove(). Sự khác biệt giữa hai hàm này là hàm trước trả về giá trị đã xóa trong khi hàm sau thì không

Hàm pop() không nhận tham số hoặc giá trị chỉ mục làm tham số. Khi không có tham số nào được đưa ra, hàm này bật () phần tử cuối cùng và trả về nó. Khi bạn cung cấp giá trị chỉ mục một cách rõ ràng, hàm pop() bật ra các phần tử được yêu cầu và trả về nó

Thí dụ

#when you import using arr alias
a=arr.array(data type,value list)
5

Đầu ra -

#when you import using arr alias
a=arr.array(data type,value list)
6

Hàm pop() đầu tiên loại bỏ giá trị cuối cùng 4. 6 và trả về tương tự trong khi cái thứ hai bật giá trị ở vị trí thứ 4 là 3. 1 và trả lại như cũ

Mặt khác, hàm remove() được sử dụng để xóa giá trị mà chúng ta không cần giá trị đã xóa được trả về. Hàm này lấy chính giá trị phần tử làm tham số. Nếu bạn đưa giá trị chỉ mục vào vị trí tham số, nó sẽ báo lỗi

Thí dụ

#when you import using arr alias
a=arr.array(data type,value list)
7

Đầu ra -

#when you import using arr alias
a=arr.array(data type,value list)
8

Đầu ra là một mảng chứa tất cả các phần tử ngoại trừ 1. 1

Khi bạn muốn một phạm vi giá trị cụ thể từ một mảng, bạn có thể cắt mảng để trả về giống như sau

Cắt một mảng

Một mảng có thể được cắt bằng cách sử dụng. Biểu tượng. Điều này trả về một loạt các phần tử mà chúng tôi đã chỉ định bởi các số chỉ mục

Thí dụ

#when you import using arr alias
a=arr.array(data type,value list)
9

Đầu ra –

#when you import using *
a=array(data type,value list)
0

Kết quả sẽ là các phần tử có mặt ở vị trí thứ 1, thứ 2 và thứ 3 trong mảng

Vòng qua một mảng

Sử dụng vòng lặp for, chúng ta có thể lặp qua một mảng

Thí dụ

#when you import using *
a=array(data type,value list)
1

Đầu ra –

#when you import using *
a=array(data type,value list)
2

Đầu ra ở trên cho thấy kết quả sử dụng vòng lặp for. Khi chúng ta sử dụng vòng lặp for mà không có bất kỳ tham số cụ thể nào, kết quả sẽ chứa tất cả các phần tử của mảng được cung cấp cùng một lúc. Trong vòng lặp for thứ hai, kết quả chỉ chứa các phần tử được chỉ định bằng cách sử dụng các giá trị chỉ mục. Xin lưu ý rằng kết quả không chứa giá trị ở chỉ mục số 3

Hy vọng bạn rõ ràng với tất cả những gì đã được chia sẻ với bạn trong hướng dẫn này. Điều này đưa chúng ta đến phần cuối của bài viết về Mảng trong Python. Hãy chắc chắn rằng bạn thực hành càng nhiều càng tốt và hoàn nguyên kinh nghiệm của bạn

Nếu bạn muốn xem thêm các bài viết về các công nghệ đang thịnh hành nhất trên thị trường như Trí tuệ nhân tạo, DevOps, Ethical Hacking, thì bạn có thể tham khảo trang web chính thức của Edureka

Hãy tìm các bài viết khác trong loạt bài này sẽ giải thích nhiều khía cạnh khác của Python và Khoa học dữ liệu

Mảng là gì [. ] trong Python?

Mảng trong Python là Cấu trúc dữ liệu có thể chứa nhiều giá trị cùng loại. Thông thường, chúng bị hiểu sai thành danh sách hoặc Mảng Numpy

Tôi có nên phân bổ trước mảng Python không?

Bạn không cần phân bổ trước bất kỳ thứ gì . Đằng sau hậu trường, loại danh sách sẽ định kỳ phân bổ nhiều dung lượng hơn mức cần thiết để sử dụng ngay lập tức để phân bổ chi phí thay đổi kích thước mảng cơ bản qua nhiều lần cập nhật.

Làm cách nào để điền vào một mảng trong Python?

Sử dụng hàm NumPy fill() để điền giá trị vào mảng . Hàm NumPy fill() được sử dụng để điền vào một mảng NumPy đã tồn tại với các giá trị tương tự. Hàm này lấy giá trị và kiểu dữ liệu làm tham số đầu vào và điền vào mảng với giá trị đã chỉ định.

Có một mảng động trong Python không?

Một điểm khác biệt lớn nhất về cách triển khai mảng trong Python là chúng không phải là mảng thông thường, chúng là mảng động . Một mảng động có thuộc tính tự động thay đổi kích thước. Các mảng chúng tôi xác định không còn cần phải có kích thước cố định, số lượng phần tử chúng tôi có trong chúng có thể thay đổi (tăng hoặc giảm) bất cứ lúc nào.