Các thao tác trên danh sách trong Python

Bài viết được sự cho phép của tác giả Kien Dang Chung

Chúng ta đã được giới thiệu các kiểu dữ liệu cơ bản trong Python bao gồm kiểu số nguyên (int), kiểu số thực (float), kiểu chuỗi (string) và kiểu logic (boolean). Với các kiểu dữ liệu cơ bản này, bạn hoàn toàn có thể viết các ứng dụng đơn giản với Python. Với các ứng dụng có số lượng các biến nhiều, dữ liệu lớn chúng ta cần tới các cấu trúc dữ liệu giúp cho việc viết code ngắn gọn và hiệu quả.

  71 trích đoạn code Python cho các vấn đề hàng ngày của bạn

  Biến số và kiểu dữ liệu số trong Python

Xem thêm các cơ hội tuyển dụng Python hấp dẫn trên TopDev

Cấu trúc dữ liệu được sử dụng trong các chương trình để dễ dàng hơn trong việc định vị thông tin và lấy thông tin. Cấu trúc dữ liệu là cách các ngôn ngữ lập trình thể hiện các giá trị cơ bản, chúng chứa các kiểu dữ liệu cơ bản như số, chuỗi, boolean…, nó đưa ra cách thức lưu trữ nhiều giá trị trong một biến số. Cấu trúc dữ liệu cũng được sử dụng để phân nhóm và tổ chức cho các cấu trúc khác.

Để làm rõ hơn sự cần thiết các cấu trúc dữ liệu cơ bản, chúng ta có một ví dụ như sau:

friend1 = "Rolf" friend2 = "Bob" friend3 = "Anne" print(friend1) print(friend2) print(friend3)

Một chương trình rất đơn giản với 3 biến chứa tên 3 người bạn, chúng ta in ra tên 3 người này. Tưởng tượng khi số lượng bạn gia tăng, bạn phải thêm vào hàng trăm biến và hàng trăm câu lệnh in ra màn hình. Quả là một thảm họa. Các cấu trúc dữ liệu cơ bản xuất hiện giúp bạn giải quyết vấn đề này.

List là một tập dữ liệu đơn giản nhất trong Python, một List là một danh sách các thành phần dữ liệu được phân cách bởi dấu phẩy và được bao ngoài bởi dấu ngoặc vuông. Tên của list được gán bằng cách sử dụng dấu =. List có thể chứa các con số hoặc các chuỗi.

friends = ["Rolf","Bob","Anne"] ages = [35,28,37]

Để hiển thị nội dung List chúng ta có thể dùng hàm print(). List này có thể rất dài, bạn thấy đấy, chương trình ở phần trên với 3 biến có thể viết ngắn gọn hơn.

Chú ý, một danh sách có thể chứa nhiều loại dữ liệu khác nhau nếu bạn thấy cần thiết, tuy nhiên khuyến cáo nên dừng một loại dữ liệu thống nhất cho các phần tử trong danh sách.

friends = ["Rolf",2,"Anne"]

Định nghĩa danh sách này có cả số 2 bên trong danh sách friends, nó rất tối nghĩa, không có người bạn nào tên là 2 cả.

Mỗi phần tử trong List sẽ có một vị trí nhất định tương ứng với một con số, bắt đầu từ số 0 và tăng dần. Chúng ta có thể truy xuất đến các phần tử trong danh sách với cú pháp:

list_name[element_position]

Trong ví dụ trên, để truy xuất đến tên Bob, chúng ta thực hiện như sau:

friends = ["Rolf","Bob","Anne"] print(friends[1])

Chú ý, nếu bạn truy xuất đến một phần tử không có trong danh sách, một lỗi sẽ xuất hiện có dạng “index out of range”. Ví dụ như các phần tử trong danh sách friends có vị trí tương ứng là 0, 1, 2. Nếu bạn truy xuất đến phần tử có vị trí lớn hơn 2 sẽ gặp lỗi “index out of range”.

Mỗi phần tử trong danh sách của Python có thể là một danh sách, ví dụ như danh sách sau đây, mỗi phần tử là một danh sách gồm tên và tuổi của bạn bè.

friends = [["Rolf", 24], ["Bob", 30], ["Anne", 27]] print(friends[0][1]) print(friends[1][0])

Trong Python không giới hạn số chiều của danh sách cũng như số phần tử danh sách có thể chứa, nó chỉ phụ thuộc vào dung lượng bộ nhớ máy tính bạn dùng để chạy ứng dụng.

Chú ý, với các danh sách dài, chúng ta nên trình bày mỗi phần tử trên một dòng, như vậy code chương trình sẽ dễ đọc hơn, ví dụ:

friends = [ ["Rolf", 24], ["Bob", 30], ["Anne", 27], ["Charlie", 37], ["Jen", 25], ["Adam", 29], ]

Trong quá trình thao tác với danh sách, bạn sẽ gặp phải một số yêu cầu kiểu như: kiểm tra xem danh sách có chứa một phần tử nào đó không? đếm số phần tử trong danh sách? hoặc các thao tác thêm bớt điều chỉnh phần tử trong danh sách… Các yêu cầu này đều có toán tử hoặc các phương thức được xây dựng sẵn trong đối tượng List.

Toán tử in cho phép bạn kiểm tra một phần tử có nằm trong một danh sách hay không. Ví dụ: Kiểm tra xem “Anne” có trong danh sách friends không?

friends = ["Rolf","Bob","Anne"] has_anne = "Anne" in friends print(has_anne)

Hàm len() trả về số phần tử có trong một danh sách. Chú ý rằng trong Python các phần tử bắt đầu từ vị trí 0, do đó phần tử cuối cùng sẽ có vị trí là len() – 1.

friends = ["Rolf","Bob","Anne"] print(f"Danh sách bạn bè có {len(friends)} bạn")

.append() thêm một phần tử vào vị trí cuối cùng trong danh sách:

friends = ["Rolf","Bob","Anne"] friends.append("Jen") new_friend = "Charlie" friends.append(new_friend) print(friends) "Rolf","Bob","Anne","Jen","Charlie"]

.insert(position, item) chèn một phần tử vào danh sách tại vị trí position cho trước.

friends = ["Rolf","Bob","Anne"] friends.insert(1,"Jen") print(friends) "Rolf","Jen","Bob","Anne"]

Các phần tử phía sau sẽ có vị trí tăng lên 1, bạn cần chú ý khi truy xuất giá trị các phần tử này.

listname[index]=newvalue Thay đổi giá trị một phần tử có vị trí index trong danh sách.

friends = ["Rolf","Bob","Anne"] friends[1] = "Jen" print(friends) "Rolf","Jen","Anne"]

.extend() Kết hợp danh sách với một danh sách khác.

friends = ["Rolf","Bob","Anne"] old_friends = ["Jen","Charlie"] friends.extend(old_friends) print(friends) "Rolf","Bob","Anne","Jen","Charlie"]

.remove() Loại bỏ một phần tử khỏi danh sách.

friends = ["Rolf","Bob","Anne"] friends.remove("Bob") print(friends) "Rolf","Anne"]

.pop(index) Loại bỏ phần tử ở vị trí index cho trước trong danh sách.

friends = ["Rolf","Bob","Anne"] friends.pop(1) print(friends) "Rolf","Anne"]

del Xóa một phần tử hoặc toàn bộ danh sách

friends = ["Rolf","Bob","Anne"] del friends[1] print(friends) "Rolf","Anne"] del friends print(friends) 'friends' is not defined

.clear() Xóa sạch các phần tử trong danh sách

friends = ["Rolf","Bob","Anne"] friends.clear() print(friends)

Chú ý, .clear() khác với del, .clear() xóa toàn bộ các phần tử trong danh sách, còn del xóa luôn cả biến danh sách.

.count() Đếm số lần một phần tử xuất hiện trong danh sách.

friends = ["Rolf","Bob","Anne","Bob"] print(f"Có {friends.count('Bob')} người tên Bob trong danh sách bạn bè")

.index() Trả về vị trí phần tử trong danh sách

friends = ["Rolf","Bob","Anne"] print(f"Anne ở vị trí thứ {friends.index('Anne')} trong danh sách")

.sort() sắp xếp các phần tử trong danh sách.

friends = ["Rolf","Bob","Anne"] friends.sort() print(friends) "Anne","Bob","Rolf"]

Mặc định sắp xếp này là tăng dần với dữ liệu chuỗi sẽ sắp xếp a-z, A-Z, với số 0-9. Để sắp xếp giảm dần sử dụng tham số reverse = True.

reverse() Đảo ngược thứ tự các phần tử trong danh sách.

friends = ["Rolf","Bob","Anne"] friends.reverse() print(friends) "Anne","Bob","Rolf"]

.copy() Copy toàn bộ danh sách.

friends = ["Rolf","Bob","Anne"] news_friends = friends.copy() news_friends.append("Jen") print(news_friends) "Anne","Bob","Rolf","Jen"]

Python hỗ trợ một cấu trúc dữ liệu cũng tương tự với List có tên là Tuple, chỉ có một khác biệt Tuple là danh sách bất biến, không thể thay đổi nội dung. Tức là ngay sau khi định nghĩa Tuple, bạn không thể thay đổi nó. Vậy tại sao có cấu trúc này và Tuple dùng trong những trường hợp nào? Câu trả lời sẽ có ở cuối bài viết này.

Định nghĩa một Tuple cũng giống như định nghĩa một List trong Python, chỉ khác một điều là thay vì sử dụng ngoặc vuông chúng ta sử dụng ngoặc thường ở đây.

friends = ("Rolf","Bob","Anne")

Chú ý, Python cho phép định nghĩa Tuple mà không cần sử dụng dấu ngoặc thường. Ví dụ:

friends = "Rolf","Bob","Anne"

Đây là một định nghĩa Tuple, thậm chí Tuple chỉ có một phần tử:

friends = "Rolf",

Chú ý dấu phẩy, nếu không có dấu phẩy thì đây là định nghĩa một chuỗi.

Tuple là một danh sách đặc biệt, không thể thay đổi khi đã tạo ra, do đó bạn có thể sử dụng tất cả các kỹ thuật, các hàm như với List nhưng loại trừ những hàm tác động thay đổi nội dung.

Ví dụ, bạn có thể sử dụng toán tử in, hàm len() với Tuple:

friends = ("Rolf","Bob","Anne") has_anne = "Annnnnne" in friends print(has_anne)

hoặc

friends = ("Rolf","Bob","Anne") print(f"Danh sách bạn bè có {len(friends)} bạn")

Tất cả các phương thức .append(), .extend(), .clear(), .copy(), .insert(), .pop(), .remove(), .reverse(), .sort() không sử dụng được với cấu trúc dữ liệu Tuple.

Chú ý, bạn không thể thay đổi Tuple nhưng có thể tạo ra một Tuple từ hai Tuple, xem ví dụ sau:

friends = ("Rolf","Bob","Anne") friends = friends + ("Jen",) print(friends) "Rolf","Bob","Anne","Jen")

Tuple có những hạn chế là khi tạo ra không thể thay đổi được tuy nhiên Tuple lại có những ưu điểm như sau:

  • Tuple có tốc độ xử lý nhanh hơn List, do Tuple được lưu trữ một khối bộ nhớ xác định còn List thì thường xuyên phải thay đổi không gian lưu trữ. Nếu bạn định nghĩa một tập các giá trị là hằng số và sau đó duyệt qua tập hợp này thì nên chọn Tuple.
  • Sử dụng Tuple giúp code an toàn hơn, khi đó chế độ “write-protect” giúp cho dữ liệu không thể thay đổi. Do vậy nên lựa chọn cho những dữ liệu dạng hằng số, dữ liệu không thay đổi theo thời gian.
  • Tuple còn được sử dụng làm khóa trong Dictionary do nó chứa các giá trị không đổi, List không được sử dụng làm khóa cho Dictionary.

Bài viết gốc được đăng tải tại allaravel.com

Có thể bạn quan tâm:

Xem thêm Việc làm IT hấp dẫn trên TopDev