Đây không phải là kiểu dữ liệu được hỗ trợ trong Python
Các mô-đun được mô tả trong chương này cung cấp nhiều loại dữ liệu chuyên biệt như ngày và giờ, mảng loại cố định, hàng đợi heap, hàng đợi hai đầu và liệt kê Show
Python cũng cung cấp một số kiểu dữ liệu dựng sẵn, cụ thể là, L = list(range(10)) L3, L = list(range(10)) L4, L = list(range(10)) L5 và L = list(range(10)) L6, và L = list(range(10)) L7. Lớp L = list(range(10)) L8 được sử dụng để chứa các chuỗi Unicode và các lớp L = list(range(10)) L9 và # Python code result = 0 for i in range(100): result += i00 được sử dụng để chứa dữ liệu nhị phân Các mô-đun sau đây được ghi lại trong chương này
Khoa học và tính toán dựa trên dữ liệu hiệu quả đòi hỏi phải hiểu cách dữ liệu được lưu trữ và thao tác. Phần này phác thảo và đối chiếu cách các mảng dữ liệu được xử lý bằng chính ngôn ngữ Python và cách NumPy cải thiện điều này. Hiểu được sự khác biệt này là nền tảng để hiểu phần lớn nội dung xuyên suốt phần còn lại của cuốn sách. Người dùng Python thường bị thu hút bởi tính dễ sử dụng của nó, một phần trong số đó là tính năng gõ động. Trong khi một ngôn ngữ kiểu tĩnh như C hoặc Java yêu cầu mỗi biến phải được khai báo rõ ràng thì một ngôn ngữ kiểu động như Python lại bỏ qua đặc tả này. Ví dụ: trong C, bạn có thể chỉ định một thao tác cụ thể như sau /* C code */ int result = 0; for(int i=0; i<100; i++){ result += i; } Trong khi trong Python, hoạt động tương đương có thể được viết theo cách này # Python code result = 0 for i in range(100): result += i Lưu ý sự khác biệt chính. trong C, các kiểu dữ liệu của từng biến được khai báo rõ ràng, trong khi ở Python, các kiểu được suy ra động. Điều này có nghĩa là, ví dụ, chúng ta có thể gán bất kỳ loại dữ liệu nào cho bất kỳ biến nào # Python code x = 4 x = "four" Ở đây chúng tôi đã chuyển nội dung của struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };8 từ một số nguyên sang một chuỗi. Điều tương tự trong C sẽ dẫn đến (tùy thuộc vào cài đặt trình biên dịch) đến lỗi biên dịch hoặc các hậu quả không mong muốn khác /* C code */ int x = 4; x = "four"; // FAILS Loại linh hoạt này là một phần giúp Python và các ngôn ngữ được nhập động khác trở nên thuận tiện và dễ sử dụng. Hiểu cách thức hoạt động của nó là một phần quan trọng của việc học để phân tích dữ liệu hiệu quả và hiệu quả với Python. Nhưng điều mà tính linh hoạt của kiểu này cũng chỉ ra là thực tế là các biến Python không chỉ có giá trị của chúng; . Chúng ta sẽ khám phá điều này nhiều hơn trong các phần tiếp theo Một số nguyên trong Python không chỉ là một số nguyên¶Việc triển khai Python tiêu chuẩn được viết bằng C. Điều này có nghĩa là mọi đối tượng Python chỉ đơn giản là một cấu trúc C được ngụy trang khéo léo, không chỉ chứa giá trị của nó mà còn chứa các thông tin khác. Ví dụ: khi chúng tôi xác định một số nguyên trong Python, chẳng hạn như struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };9, thì struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };8 không chỉ là số nguyên "thô". Nó thực sự là một con trỏ tới cấu trúc C phức hợp, chứa một số giá trị. Nhìn qua Python 3. 4, chúng tôi thấy rằng định nghĩa kiểu số nguyên (dài) trông giống như thế này (khi các macro C được mở rộng) struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; }; Một số nguyên duy nhất trong Python 3. 4 thực sự chứa bốn mảnh
Điều này có nghĩa là có một số chi phí trong việc lưu trữ một số nguyên trong Python so với một số nguyên trong ngôn ngữ được biên dịch như C, như được minh họa trong hình dưới đây Ở đây L = list(range(10)) L5 là một phần của cấu trúc chứa số lượng tham chiếu, mã loại và các phần khác được đề cập trước đó Lưu ý sự khác biệt ở đây. số nguyên C về cơ bản là nhãn cho một vị trí trong bộ nhớ có byte mã hóa giá trị số nguyên. Số nguyên Python là một con trỏ tới một vị trí trong bộ nhớ chứa tất cả thông tin đối tượng Python, bao gồm các byte chứa giá trị số nguyên. Thông tin bổ sung này trong cấu trúc số nguyên Python là thứ cho phép Python được mã hóa một cách tự do và linh hoạt. Tuy nhiên, tất cả thông tin bổ sung này trong các loại Python đều phải trả giá, điều này trở nên đặc biệt rõ ràng trong các cấu trúc kết hợp nhiều đối tượng này Danh sách Python không chỉ là một danh sách¶Bây giờ hãy xem xét điều gì sẽ xảy ra khi chúng ta sử dụng cấu trúc dữ liệu Python chứa nhiều đối tượng Python. Vùng chứa đa phần tử có thể thay đổi tiêu chuẩn trong Python là danh sách. Chúng ta có thể tạo một danh sách các số nguyên như sau Trong 1] ________số 8 Ra[1] # Python code result = 0 for i in range(100): result += i4 Trong 2] # Python code result = 0 for i in range(100): result += i5 Ra[2] # Python code result = 0 for i in range(100): result += i6 Hoặc, tương tự, một danh sách các chuỗi Trong 3] # Python code result = 0 for i in range(100): result += i7 Ra[3] # Python code result = 0 for i in range(100): result += i0 Trong [4] # Python code result = 0 for i in range(100): result += i1 Ra[4] # Python code result = 0 for i in range(100): result += i2 Do kiểu gõ động của Python, chúng ta thậm chí có thể tạo các danh sách không đồng nhất Trong [5] # Python code result = 0 for i in range(100): result += i3 Ra[5] # Python code result = 0 for i in range(100): result += i4 Nhưng sự linh hoạt này phải trả giá. để cho phép các loại linh hoạt này, mỗi mục trong danh sách phải chứa thông tin loại, số lượng tham chiếu và thông tin khác của riêng nó–nghĩa là mỗi mục là một đối tượng Python hoàn chỉnh. Trong trường hợp đặc biệt tất cả các biến đều cùng loại, phần lớn thông tin này là dư thừa. lưu trữ dữ liệu trong một mảng kiểu cố định có thể hiệu quả hơn nhiều. Sự khác biệt giữa danh sách kiểu động và mảng kiểu cố định (kiểu NumPy) được minh họa trong hình dưới đây Ở cấp độ triển khai, mảng về cơ bản chứa một con trỏ tới một khối dữ liệu liền kề. Mặt khác, danh sách Python chứa một con trỏ tới một khối con trỏ, mỗi con trỏ lần lượt trỏ tới một đối tượng Python đầy đủ giống như số nguyên Python mà chúng ta đã thấy trước đó. Một lần nữa, lợi thế của danh sách là tính linh hoạt. bởi vì mỗi phần tử danh sách là một cấu trúc đầy đủ chứa cả dữ liệu và thông tin loại, danh sách có thể chứa đầy dữ liệu thuộc bất kỳ loại mong muốn nào. Các mảng kiểu NumPy loại cố định thiếu tính linh hoạt này, nhưng hiệu quả hơn nhiều để lưu trữ và thao tác dữ liệu Mảng kiểu cố định trong Python¶Python cung cấp một số tùy chọn khác nhau để lưu trữ dữ liệu trong bộ đệm dữ liệu loại cố định, hiệu quả. Mô-đun L = list(range(10)) L6 tích hợp sẵn (có sẵn từ Python 3. 3) có thể được sử dụng để tạo các mảng dày đặc thuộc loại đồng nhất Trong [6] # Python code result = 0 for i in range(100): result += i5 Ra[6] # Python code result = 0 for i in range(100): result += i6 Đây L = list(range(10)) L7 là mã loại cho biết nội dung là số nguyên Tuy nhiên, hữu ích hơn nhiều là đối tượng L = list(range(10)) L8 của gói NumPy. Trong khi đối tượng L = list(range(10)) L6 của Python cung cấp khả năng lưu trữ hiệu quả dữ liệu dựa trên mảng, NumPy bổ sung thêm các hoạt động hiệu quả này trên dữ liệu đó. Chúng ta sẽ khám phá các hoạt động này trong các phần sau; Chúng ta sẽ bắt đầu với việc nhập NumPy tiêu chuẩn, dưới bí danh # Python code result = 0 for i in range(100): result += i40 Trong [7] # Python code result = 0 for i in range(100): result += i7 Tạo mảng từ danh sách Python¶Đầu tiên, chúng ta có thể sử dụng # Python code result = 0 for i in range(100): result += i41 để tạo mảng từ danh sách Python Trong [8] # Python code result = 0 for i in range(100): result += i8 Ra[8] # Python code result = 0 for i in range(100): result += i9 Hãy nhớ rằng không giống như danh sách Python, NumPy bị hạn chế đối với các mảng chứa cùng loại. Nếu các loại không khớp, NumPy sẽ upcast nếu có thể (ở đây, các số nguyên được up lên thành dấu phẩy động) Trong [9] # Python code x = 4 x = "four"0 Ra[9] # Python code x = 4 x = "four"1 Nếu chúng ta muốn thiết lập rõ ràng kiểu dữ liệu của mảng kết quả, chúng ta có thể sử dụng từ khóa # Python code result = 0 for i in range(100): result += i42 Trong [10] # Python code x = 4 x = "four"2 Ra[10] # Python code x = 4 x = "four"3 Cuối cùng, không giống như danh sách Python, mảng NumPy rõ ràng có thể là đa chiều; Trong [11] # Python code x = 4 x = "four"4 Ra[11] # Python code x = 4 x = "four"5 Các danh sách bên trong được coi là các hàng của mảng hai chiều kết quả Tạo mảng từ đầu¶Đặc biệt đối với các mảng lớn hơn, việc tạo các mảng từ đầu sẽ hiệu quả hơn bằng cách sử dụng các quy trình được tích hợp trong NumPy. Dưới đây là một số ví dụ Trong [12] # Python code x = 4 x = "four"6 Ra[12] # Python code x = 4 x = "four"7 Trong [13] # Python code x = 4 x = "four"8 Ra[13] # Python code x = 4 x = "four"9 Trong [14] /* C code */ int x = 4; x = "four"; // FAILS0 Ra[14] /* C code */ int x = 4; x = "four"; // FAILS1 Trong [15] /* C code */ int x = 4; x = "four"; // FAILS2 Ra[15] /* C code */ int x = 4; x = "four"; // FAILS3 Trong [16] /* C code */ int x = 4; x = "four"; // FAILS4 Ra[16] /* C code */ int x = 4; x = "four"; // FAILS5 Trong [17] /* C code */ int x = 4; x = "four"; // FAILS6 Ra[17] /* C code */ int x = 4; x = "four"; // FAILS7 Trong [18] /* C code */ int x = 4; x = "four"; // FAILS8 Hết[18] /* C code */ int x = 4; x = "four"; // FAILS9 Trong 19] struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };0 Hết[19] struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };1 Trong 20] struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };2 Hết[20] struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };3 Trong [21] struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };4 Hết[21] struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };5 Kiểu dữ liệu chuẩn NumPy¶Mảng NumPy chứa các giá trị của một loại duy nhất, vì vậy điều quan trọng là phải có kiến thức chi tiết về các loại đó và các hạn chế của chúng. Vì NumPy được xây dựng bằng C nên các loại này sẽ quen thuộc với người dùng C, Fortran và các ngôn ngữ liên quan khác Các kiểu dữ liệu NumPy tiêu chuẩn được liệt kê trong bảng sau. Lưu ý rằng khi xây dựng một mảng, chúng có thể được chỉ định bằng một chuỗi struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };6 Hoặc sử dụng đối tượng NumPy được liên kết struct _longobject { long ob_refcnt; PyTypeObject *ob_type; size_t ob_size; long ob_digit[1]; };7 Kiểu dữ liệu Mô tả # Python code result = 0 for i in range(100): result += i43Boolean (Đúng hoặc Sai) được lưu trữ dưới dạng byte # Python code result = 0 for i in range(100): result += i44Kiểu số nguyên mặc định (giống như C # Python code result = 0 for i in range(100): result += i45; thông thường là # Python code result = 0 for i in range(100): result += i46 hoặc # Python code result = 0 for i in range(100): result += i47) # Python code result = 0 for i in range(100): result += i48Giống với C # Python code result = 0 for i in range(100): result += i49 (thường là # Python code result = 0 for i in range(100): result += i47 hoặc # Python code result = 0 for i in range(100): result += i46) # Python code result = 0 for i in range(100): result += i52Số nguyên được sử dụng để lập chỉ mục (giống như C # Python code result = 0 for i in range(100): result += i53; thông thường là # Python code result = 0 for i in range(100): result += i47 hoặc # Python code result = 0 for i in range(100): result += i46 . # Python code result = 0 for i in range(100): result += i66 Phao nửa chính xác. bit dấu, 5 bit số mũ, 10 bit mantissa # Python code result = 0 for i in range(100): result += i67 Phao chính xác đơn. bit dấu, 8 bit số mũ, 23 bit mantissa # Python code result = 0 for i in range(100): result += i65 Phao chính xác kép. bit dấu, 11 bit số mũ, 52 bit phần định trị ________ 169 Viết tắt của ________ 170. # Python code result = 0 for i in range(100): result += i71Số phức, được biểu thị bằng hai số float 32 bit # Python code result = 0 for i in range(100): result += i70Số phức, được biểu thị bằng hai số float 64 bit Có thể có đặc tả loại nâng cao hơn, chẳng hạn như chỉ định số cuối lớn hoặc nhỏ; . NumPy cũng hỗ trợ các loại dữ liệu phức hợp, sẽ được đề cập trong Dữ liệu có cấu trúc. Mảng có cấu trúc của NumPy Các loại dữ liệu được hỗ trợ trong python là gì?Kiểu dữ liệu Python . Kiểu dữ liệu số. int, float, phức tạp Kiểu dữ liệu chuỗi. str các loại trình tự. danh sách, tuple, phạm vi loại nhị phân. byte, bytearray, memoryview Loại dữ liệu ánh xạ. mệnh lệnh kiểu Boolean. bool Đặt kiểu dữ liệu. bộ, bộ đông lạnh. Kiểu dữ liệu số Python. Kiểu dữ liệu số Python được sử dụng để chứa các giá trị số như; 4 kiểu dữ liệu chính trong python là gì?Sau đây là kiểu dữ liệu chuẩn hoặc tích hợp sẵn của Python. . số Loại trình tự Boolean Từ điển Danh sách có phải là kiểu dữ liệu được hỗ trợ trong python không?Danh sách là một trong 4 loại dữ liệu tích hợp sẵn trong Python dùng để lưu trữ các tập hợp dữ liệu, 3 loại còn lại là Tuple, Set và Dictionary, tất cả đều có chất lượng và cách sử dụng khác nhau. |