Hướng dẫn python complex data structures - python cấu trúc dữ liệu phức tạp
1. Một số lưu ý khi nói về kiểu dữ liệuTrong khoa học máy tính, người ta thường dùng cụm từ kiểu dữ liệu khi nói đến việc một nhóm đối tượng có chung một (hoặc nhiều) tính chất nào đó. Ví dụ, ta hay nói biến A và biến B có cùng kiểu dữ liệu. Điều này có nghĩa là những giá trị và biến A và biến B đang dại diện có cùng cách thức lưu trữ trong bộ nhớ, có cùng một số hàm dựng sẵn để thao tác. Ví dụ: kiểu ký tự, kiểu số, v.v…kiểu dữ liệu khi nói đến việc một nhóm đối tượng có chung một (hoặc nhiều) tính chất nào đó. Ví dụ, ta hay nói biến A và biến B có cùng kiểu dữ liệu. Điều này có nghĩa là những giá trị và biến A và biến B đang dại diện có cùng cách thức lưu trữ trong bộ nhớ, có cùng một số hàm dựng sẵn để thao tác. Ví dụ: kiểu ký tự, kiểu số, v.v… Show Cụ thể hơn một chút, người ta phân biệt dữ liệu kiểu số (numeric types) thành: Số nguyên ( >>> Liz = [0, 1, 2, 3, 4, 5] >>> Liz.append('a') [0, 1, 2, 3, 4, 5, 'a']0, >>> Liz = [0, 1, 2, 3, 4, 5] >>> Liz.append('a') [0, 1, 2, 3, 4, 5, 'a']1, >>> Liz = [0, 1, 2, 3, 4, 5] >>> Liz.append('a') [0, 1, 2, 3, 4, 5, 'a']2, >>> Liz = [0, 1, 2, 3, 4, 5] >>> Liz.append('a') [0, 1, 2, 3, 4, 5, 'a']3, >>> Liz = [0, 1, 2, 3, 4, 5] >>> Liz.append('a') [0, 1, 2, 3, 4, 5, 'a']4, >>> Liz = [0, 1, 2, 3, 4, 5] >>> Liz.append('a') [0, 1, 2, 3, 4, 5, 'a']5, >>> Liz = [0, 1, 2, 3, 4, 5] >>> Liz.append('a') [0, 1, 2, 3, 4, 5, 'a']6, v.v… Điều quan trọng (và buồn cười) là tất cả đều có thể gọi là… kiểu.kiểu. Trong khi đó, một cấu trúc dữ liệu là cụm từ dùng để chỉ cách tổ chức một nhóm dữ liệu sao cho các thao tác và thuật toán được thực thi hiệu quả nhất. Ví dụ cấu trúc cây (tree) được phát minh để việc tìm kiếm trở nên dễ dàng hơn.cấu trúc dữ liệu là cụm từ dùng để chỉ cách tổ chức một nhóm dữ liệu sao cho các thao tác và thuật toán được thực thi hiệu quả nhất. Ví dụ cấu trúc cây (tree) được phát minh để việc tìm kiếm trở nên dễ dàng hơn. Tuy nhiên, trong thực hành, thông thường ta vẫn hay dùng cụm từ “cùng kiểu” để chỉ chung cho các biến có cùng tính chất, mà không cần phân biệt chúng có cấu trúc gì và phần tử của chúng thuộc kiểu cụ thể nào. Ví dụ khi hai biến cùng là mảng numpy ( >>> Liz = [0, 1, 2, 3, 4, 5] >>> Liz.append('a') [0, 1, 2, 3, 4, 5, 'a']7) thì có thể nói chúng có cùng kiểu. Lưu ý là đối với Python, mọi thứ đều là đối tượng, mỗi đối tượng đều phải thuộc một kiểu nào đó. Theo nghĩa này thì function, class, module,… cũng xem là các kiểu trong Python. Phần sau mình chỉ nói về kiểu dữ liệu, tức là kiểu của các đối tượng thực sự chứa dữ liệu (chỗ này hơi rối @@) 2. Những kiểu dữ liệu và cấu trúc dữ liệu thường dùng trong lập trìnhMột ngôn ngữ lập trình thường có các kiểu dữ liệu cơ bản (primitive data types) sau:
Một số cấu trúc dữ liệu thường thấy là:
Việc phân chia rõ ràng data types trong Python tương đối phức tạp. Kể cả việc Python có bao nhiêu “kiểu dữ liệu cơ bản” cũng có nhiều tài liệu trình bày khác nhau. Theo python.org (trang chủ chính thức phát hành Python) thì dữ liệu Python (chính xác là Python 2) có thể chia thành những kiểu sau:python.org (trang chủ chính thức phát hành Python) thì dữ liệu Python (chính xác là Python 2) có thể chia thành những kiểu sau:
Tuy nhiên, ở mức độ thực hành lập trình, bạn cần nắm rõ 6 kiểu dữ liệu “tiêu chuẩn” sau đây:
Một điều hết sức quan trọng đó là: Python là ngôn ngữ động, vì thế biến sẽ tự động thay đổi kiểu phụ thuộc vào giá trị mà nó trỏ đến. 3.1 Python NumbersKiểu số trong Python gồm có: intger, float, long và complex. >>> a = 1 >>> type(a) 3.2 Python ListLà một trong những kiểu dư liệu được dùng nhiều nhất trong Python. Sau đây là một số lưu ý về list:list:
>>> Liz = [0, 1, 2, 3, 4, 5] >>> Liz.append('a') [0, 1, 2, 3, 4, 5, 'a'] Một list có rất nhiều phương thức để thao tác với nó. Sau đây là những phương thức thường dùng nhất: # Khởi tạo một tập hợp bằng cặp dấu ngoặc móc. Những phần tử trùng lặp sẽ tự động bị loại bỏ >>> S = {1, 2, (3,4), 1, 2, "abc"} set([1, 2, 'abc', (3, 4)]) # Kiểm tra số phần tử >>> len(S) 4 # Thêm một phần tử vào tập hợp >>> S.add(99) set([1, 2, 99, 'abc', (3, 4)]) # Xóa một phần tử khỏi tập hợp. Nếu phần tử không có trong tập hợp thì thôi 😛 S.discard(9)4, # Khởi tạo một tập hợp bằng cặp dấu ngoặc móc. Những phần tử trùng lặp sẽ tự động bị loại bỏ >>> S = {1, 2, (3,4), 1, 2, "abc"} set([1, 2, 'abc', (3, 4)]) # Kiểm tra số phần tử >>> len(S) 4 # Thêm một phần tử vào tập hợp >>> S.add(99) set([1, 2, 99, 'abc', (3, 4)]) # Xóa một phần tử khỏi tập hợp. Nếu phần tử không có trong tập hợp thì thôi 😛 S.discard(9)5, # Khởi tạo một tập hợp bằng cặp dấu ngoặc móc. Những phần tử trùng lặp sẽ tự động bị loại bỏ >>> S = {1, 2, (3,4), 1, 2, "abc"} set([1, 2, 'abc', (3, 4)]) # Kiểm tra số phần tử >>> len(S) 4 # Thêm một phần tử vào tập hợp >>> S.add(99) set([1, 2, 99, 'abc', (3, 4)]) # Xóa một phần tử khỏi tập hợp. Nếu phần tử không có trong tập hợp thì thôi 😛 S.discard(9)6, # Khởi tạo một tập hợp bằng cặp dấu ngoặc móc. Những phần tử trùng lặp sẽ tự động bị loại bỏ >>> S = {1, 2, (3,4), 1, 2, "abc"} set([1, 2, 'abc', (3, 4)]) # Kiểm tra số phần tử >>> len(S) 4 # Thêm một phần tử vào tập hợp >>> S.add(99) set([1, 2, 99, 'abc', (3, 4)]) # Xóa một phần tử khỏi tập hợp. Nếu phần tử không có trong tập hợp thì thôi 😛 S.discard(9)7, # Khởi tạo một tập hợp bằng cặp dấu ngoặc móc. Những phần tử trùng lặp sẽ tự động bị loại bỏ >>> S = {1, 2, (3,4), 1, 2, "abc"} set([1, 2, 'abc', (3, 4)]) # Kiểm tra số phần tử >>> len(S) 4 # Thêm một phần tử vào tập hợp >>> S.add(99) set([1, 2, 99, 'abc', (3, 4)]) # Xóa một phần tử khỏi tập hợp. Nếu phần tử không có trong tập hợp thì thôi 😛 S.discard(9)8 3.3 Python TupleRất giống với List. Một số điểm khác biệt:
>>> Tup = tuple('aabc') ('a','a','b','c') >>> Tup.count('a') 2 3.4 Python StringString trong Python là dãy có thứ tự các ký tự Unicode.dãy có thứ tự các ký tự Unicode.
3.5 Python SetSet là kiểu dữ liệu rất đặc biệt trong Python: chứa một tập hợp các phần tử bất kỳ (có thể là số, chuỗi, list, tuple, module, class, một set khác,…)bất kỳ (có thể là số, chuỗi, list, tuple, module, class, một set khác,…)
# Khởi tạo một tập hợp bằng cặp dấu ngoặc móc. Những phần tử trùng lặp sẽ tự động bị loại bỏ >>> S = {1, 2, (3,4), 1, 2, "abc"} set([1, 2, 'abc', (3, 4)]) # Kiểm tra số phần tử >>> len(S) 4 # Thêm một phần tử vào tập hợp >>> S.add(99) set([1, 2, 99, 'abc', (3, 4)]) # Xóa một phần tử khỏi tập hợp. Nếu phần tử không có trong tập hợp thì thôi 😛 S.discard(9) 3.6 Python DictionaryDistionary là kiểu dữ liệu có nhiều ứng dụng trong Python. Dict chứa một tập hợp các cặp key : valuekey : value
# Khởi tạo một dict có 2 cặp key:value. Key là các số nguyên, value là các danh sách >>> D = {1:[8,8,8], 2:[9,9,9]} # Thay đổi giá trị một key trong dict >>> MyPC = {'model':'XPS13', 'RAM':16, 'OS':'Windows', 'Processor':'Intel'} >>> MyPC['OS'] = 'Ubuntu' # Xem các keys của dict >>> MyPC.keys() ['model', 'RAM', 'OS', 'Processor'] Để ôn lại về kiểu dữ liệu mutable và immutable trong Python, mời bạn xem bài viết Python: Phân biệt Mutable vs ImmutablePython: Phân biệt Mutable vs Immutable 4. Kết luậnPython cơ bản có 6 kiểu dữ liệu tiêu chuẩn cần nắm rõ: Numbers, List, Tuple, Strings, Set và Dictionary. Bài viết này chỉ nhằm mục đích bàn luận về kiểu dữ liệu trong Python. Ngoài những kiểu gốc của Python, những thư viện ngoài có những kiểu dữ liệu tự định nghĩa riêng của nó, dựa trên những kiểu dữ liệu có sẵn. Ví dụ trong numpy, kiểu dữ liệu thường gặp là numpy.ndarray, trong khi kiểu dữ liệu cơ bản trong thư viện pandas là Series và DataFrame.numpy, kiểu dữ liệu thường gặp là numpy.ndarray, trong khi kiểu dữ liệu cơ bản trong thư viện pandas là Series và DataFrame. 5. Tài liệu tham khảo
TEXmath NỘI DUNG CHÍNH
|