Để nhập vào 2 số nguyên ab mỗi số trên một dòng trong Python ta dùng lệnh
Trong phần trước, chúng ta đã làm quen với chương trình Python đầu tiên là thêm hai số và in tổng của chúng ra ngoài màn hình. Phần này, bạn sẽ học về các kiểu dữ liệu trong Python và cách sử dụng Python như một chiếc máy tính: học về số, chuỗi, list và đi bước đầu tiên hướng tới lập trình Python. Show
Vì bài viết sẽ liệt kê những nội dung quan trọng nhất của tất cả các kiểu dữ liệu trong Python nên sẽ khá dài. Mỗi kiểu dữ liệu đều đi kèm với ví dụ cụ thể để bạn dễ hình dung. Hãy chắc chắn bạn đã lưu lại trang Tài liệu Python này để cập nhật những bài mới nhất nhé. Đừng quên làm bài tập Python để củng cố kiến thức nữa nhé. Kiểu dữ liệu trong Python
1. Biến trong PythonBiến là một vị trí trong bộ nhớ được sử dụng để lưu trữ dữ liệu (giá trị). Biến được đặt tên duy nhất để phân biệt giữa các vị trí bộ nhớ khác nhau. Các quy tắc để viết tên một biến giống như quy tắc viết các định danh trong Python. Trong Python, bạn không cần khai báo biến trước khi sử dụng, chỉ cần gán cho biến một giá trị và nó sẽ tồn tại. Cũng không cần phải khai báo kiểu biến, kiểu biến sẽ được nhận tự động dựa vào giá trị mà bạn đã gán cho biến. Gán giá trị cho biến: Để gán giá trị cho biến ta sử dụng toán tử =. Bất kỳ loại giá trị nào cũng có thể gán cho biến hợp lệ. Ví dụ:
Phía trên là 3 câu lệnh gán, "Hồng" là một chuỗi ký tự, được gán cho biến hoa, 3 là số nguyên và được gán cho la, 5.5 là số thập phân và gán cho canh. Gán nhiều giá trị: Trong Python bạn có thể thực hiện gán nhiều giá trị trong một lệnh như sau:
Nếu muốn gán giá trị giống nhau cho nhiều biến thì có thể viết lệnh như sau:
Lệnh trên sẽ gán giá trị 3 cho cả 3 biến là hoa, la và canh. 2. Kiểu dữ liệu số trong PythonCác kiểu dữ liệu số trong PythonPython hỗ trợ số nguyên, số thập phân và số phức, chúng lần lượt được định nghĩa là các lớp int, float, complex trong Python. Số nguyên và số thập phân được phân biệt bằng sự có mặt hoặc vắng mặt của dấu thập phân. Ví dụ: 5 là số nguyên, 5.0 là số thập phân. Python cũng hỗ trợ số phức và sử dụng hậu tố 27 hoặc 28 để chỉ phần ảo. Ví dụ: 29. Ngoài 30 và 31, Python hỗ trợ thêm 2 loại số nữa là 32 và 33.Ta sẽ dùng hàm 34 để kiểm tra xem biến hoặc giá trị thuộc lớp số nào và hàm 35 để kiểm tra xem chúng có thuộc về một class cụ thể nào không.
Số nguyên trong Python không bị giới hạn độ dài, số thập phân bị giới hạn đến 16 số sau dấu thập phân. Những con số chúng là làm việc hàng ngày thường là hệ số 10, nhưng lập trình viên máy tính (thường là lập trình viên nhúng) cần làm việc với hệ thống số nhị phân, thập lục phân và bát phân. Để biểu diễn những hệ số này trong Python, ta đặt một tiền tố thích hợp trước số đó. Tiền tố hệ số cho các số Python: Hệ thống sốTiền tốHệ nhị phân'0b' hoặc '0B'Hệ bát phân'0o' hoặc '0O'Hệ thập lục phân'0x' hoặc '0X'(Bạn đặt tiền tố nhưng không có dấu ' ' nhé). Đây là ví dụ về việc sử dụng các tiền tố hệ số trong Python, và khi dùng hàm 36 để in giá trị của chúng ra màn hình, ta sẽ nhận được số tương ứng trong hệ số 10.
Chuyển đổi giữa các kiểu số trong PythonChúng ta có thể chuyển đổi kiểu số này sang kiểu số khác. Điều này còn được gọi là cưỡng chế (coercion). Các phép toán như cộng, trừ sẽ ngầm chuyển đổi số nguyên thành số thập phân (một cách tự động) nếu có một toán tử trong phép toán là số thập phân. Ví dụ: Nếu bạn thực hiện phép cộng giữa số nguyên là 2 và số thập phân là 3.0, thì 2 sẽ bị cưỡng chế chuyển thành số thập phân 2.0 và kết quả trả về sẽ là số thập phân 5.0.
Ta có thể sử dụng các hàm Python tích hợp sẵn như 37, 38 và 39 để chuyển đổi giữa các kiểu số một cách rõ ràng. Những hàm này thậm chí có thể chuyển đổi từ các chuỗi.
Khi chuyển đổi từ số thập phân sang số nguyên, số sẽ bị bỏ bớt, chỉ lấy phần nguyên. Mô-đun Decimal trong PythonClass float được tích hợp trong Python có thể khiến chúng ta ngạc nhiên đôi chút. Thông thường nếu tính tổng 1.1 và 2.2 ta nghĩ kết quả sẽ là 3.3, nhưng có vẻ không phải vậy. Nếu bạn kiểm tra tính đúng sai của phép toán này trong Python, sẽ nhận được kết quả là False.
Chuyện gì xảy ra vậy? Điều này là do, các số thập phân được thực hiện trong phần cứng máy tính dưới dạng phân số nhị phân, vì máy tính chỉ hiểu các số nhị phân (0 và 1) nên hầu hết các phân số thập phân mà chúng ta biết, không thể được lưu trữ chính xác trong máy tính. Ví dụ, ta không thể biểu diễn phân số 1/3 dưới dạng số thập phân, vì nó là một số thập phân vô hạn tuần hoàn, với các số sau dấu thập phân dài vô hạn, nên ta chỉ có thể ước tính nó. Khi chuyển đổi phần thập phân 0.1, sẽ dẫn đến phần nhị phân dài vô hạn của 0.000110011001100110011... và máy tính chỉ lưu trữ một phần số hữu hạn sau dấu . của nó thôi. Do đó, số được lưu trữ chỉ xấp xỉ 0.1 chứ không bao giờ bằng 0.1. Đó là lý do vì sao, phép cộng chúng ta nói đến ở trên không đưa ra kết quả như chúng ta mong đợi. Đó là giới hạn của phần cứng máy tính chứ không phải lỗi của Python. Giờ bạn thử gõ phép cộng trên vào Python xem kết quả trả về là bao nhiêu nhé:
Để khắc phục vấn đề này, chúng ta có thể sử dụng mô-đun Decimal trong Python. Trong khi số float chỉ lấy 16 số sau dấu thập phân thì mô-đun Decimal cho phép tùy chỉnh độ dài của số.
Mô-đun này được sử dụng khi chúng ta muốn thực hiện các phép toán ở hệ số thập phân để có kết quả như đã học ở trường. Điều này cũng khá quan trọng, ví dụ như 25.50kg sẽ chính xác hơn 25.5kg, vì 2 chữ số thập phân vẫn chính xác hơn 1 chữ số. 0Nếu muốn code ngắn gọn hơn, bạn có thể nhập mô-đun Decimal và sửa tên mô-đun thành D. 1Trong code này ta nhập mô-đun Decimal và sửa tên nó thành D, kết quả không đổi so với code trên. Bạn có thể thắc mắc trong phần phép nhân, tại sao không sử dụng số Decimal để nhân lại phải thêm số 0 vào sau 4 và cả 2.5. Câu trả lời là tính hiệu quả, các phép toán với số float được hiện nhanh hơn các phép toán Decimal. Khi nào nên sử dụng Decimal thay cho float?Ta thường sử dụng Decimal trong các trường hợp sau:
Phân số trong PythonPython cung cấp các phép toán liên quan đến phân số thông qua mô-đun fractions. Một phân số có tử số và mẫu số, cả hai đều là số nguyên. Ta có thể tạo đối tượng phân số (Fraction) theo nhiều cách khác nhau: 2Khi tạo phân số từ float, ta có thể nhận được những kết quả không bình thường, điều này là do hạn chế của phần cứng máy tính như đã thảo luận trong phần mô-đun decimal. Đặc biệt, bạn có thể khởi tạo một phân số từ string. Đây là cách khởi tạo được ưa thích khi sử dụng số thập phân. 3Kiểu dữ liệu phân số hỗ trợ đầy đủ các phép toán cơ bản như cộng, trừ, nhân, chia, logic: 4Toán học trong PythonPython cung cấp các mô-đun math và random để giải quyết các vấn đề toán học khác như lượng giác, logarit, xác suất và thống kê, v.v... Vì mô-đun math có khá nhiều hàm và thuộc tính, nên mình tính sẽ làm một bài riêng để liệt kê chúng. Dưới đây là ví dụ về math trong Python. 5Sử dụng trình thông dịch như máy tính bỏ túiTrình thông dịch hoạt động như một máy tính đơn giản: Bạn có thể nhập vào một phép tính và nó sẽ viết ra giá trị. Cú pháp biểu thức khá đơn giản: các toán tử như +, -, * và / làm việc giống như trong hầu hết các ngôn ngữ lập trình khác (Pascal, C), dấu ngoặc đơn () có thể được sử dụng để nhóm. Ví dụ: 6Số nguyên (ví dụ như 40, 41, 42) có kiểu 43, số dạng thập phân (như 44, 45) có kiểu 46.Phép chia ( 47) luôn luôn trả về kiểu float. Để thực hiện phép chia lấy phần nguyên (loại bỏ các số sau dấu thập phân) bạn có thể sử dụng toán tử 48; để tính phần dư thì sử dụng 49 như ví dụ dưới đây: 7Với Python, bạn có thể sử dụng toán tử 50 để tính số mũ: 8Dấu bằng 51 được sử dụng để gán giá trị cho 1 biến. Sau đó, không có kết quả nào được hiển thị trước dấu nhắc lệnh tiếp theo: 9Nếu một biến không được định nghĩa (gán giá trị), cố gắng sử dụng biến đó, bạn sẽ nhận được lỗi sau: 0Python hỗ trợ đầy đủ cho dấu chấm động, phép tính có cả số nguyên và số thập phân thì kết quả sẽ trả về số dưới dạng thập phân (nguyên văn: toán tử với toán hạng kiểu hỗn hợp chuyển đổi toán hạng số nguyên sang số thập phân): 1Trong chế độ tương tác, biểu thức được in ra cuối cùng sẽ được gán cho biến 52, giúp dễ dàng thực hiện các phép tính tiếp theo hơn. Ví dụ: 2Bạn nên coi biến này là read-only, đừng gán giá trị cho nó - vì nếu tạo ra một biến cùng tên nó sẽ chiếm mất biến mặc định này và không còn làm được những thứ hay ho như trên nữa. 3. Chuỗi (string)String trong Python là một dãy các ký tự. Máy tính không xử lý các ký tự, chúng chỉ làm việc với số nhị phân. Dù bạn có thể nhìn thấy các ký tự trên màn hình, nhưng chúng được lưu trữ và xử lý nội bộ dưới dạng kết hợp của số 0 và 1. Việc chuyển đổi ký tự thành số được gọi là mã hóa và quá trình ngược lại được gọi là giải mã. ASCII và Unicode là 2 trong số những mã hóa phổ biến thường được sử dụng. Trong Python, string là một dãy các ký tự Unicode. Unicode bao gồm mọi ký tự trong tất cả các ngôn ngữ và mang lại tính đồng nhất trong mã hóa. Cách tạo string trong PythonBên cạnh số, Python cũng có thể thao tác với chuỗi, được biểu diễn bằng nhiều cách. Chúng có thể được để trong dấu nháy đơn ( 53) hoặc kép ( 54) với cùng một kết quả. 55 được sử dụng để "trốn (escape)" 2 dấu nháy này. 3Trong trình thông dịch tương tác, chuỗi kết quả bao gồm phần trong dấu ngoặc kép và các ký tự đặc biệt "trốn" được nhờ sử dụng \. Dù đầu ra trông có vẻ hơi khác với đầu vào (dấu nháy kèm theo có thể thay đổi) nhưng hai chuỗi này là tương đương. Chuỗi được viết trong dấu ngoặc kép khi chuỗi chứa dấu nháy đơn và không có dấu nháy kép), ngược lại nó sẽ được viết trong dấu nháy đơn. Hàm print() tạo chuỗi đầu ra dễ đọc hơn, bằng cách bỏ qua dấu nháy kèm theo và in các ký tự đặc biệt, đã "trốn" được dấu nháy: 4Nếu không muốn các ký tự được thêm vào bởi 55 được trình thông dịch hiểu là ký tự đặc biệt thì sử dụng chuỗi raw bằng cách thêm 57 vào trước dấu nháy đầu tiên: 5Chuỗi ký tự dạng chuỗi có thể viết trên nhiều dòng bằng cách sử dụng 3 dấu nháy: 58 hoặc 59. Kết thúc dòng tự động bao gồm trong chuỗi, nhưng có thể ngăn chặn điều này bằng cách thêm 55 vào cuối dòng. Ví dụ: 6Đây là kết quả (dòng mới ban đầu không được tính): Đây là danh sách tất cả các ký tự thoát (escape sequence) được Python hỗ trợ: Escape SequenceMô tả\newlineDấu gạch chéo ngược và dòng mới bị bỏ qua\\Dấu gạch chéo ngược\'Dấu nháy đơn\"Dấu nháy kép\aASCII Bell Ví dụ: Hãy chạy từng lệnh riêng lẻ ngay trong trình biên dịch để thấy kết quả bạn nhé. 7Cách truy cập vào phần tử của chuỗiCác chuỗi có thể được lập chỉ mục với ký tự đầu tiên được đánh số 0. Không có kiểu ký tự riêng biệt, mỗi ký tự đơn giản là một con số: 8Chỉ số cũng có thể là số âm, bắt đầu đếm từ bên phải: 9Lưu ý rằng vì -0 cũng tương tự như 0, nên các chỉ số âm bắt đầu từ -1. Ngoài việc đánh số, thì cắt lát cũng được hỗ trợ. Trong khi index được sử dụng để lấy các ký tự riêng lẻ thì cắt lát sẽ cho phép bạn lấy chuỗi con: 0Hãy để ý đến cách các ký tự được giữ lại và loại trừ. Nó luôn đảm bảo rằng 61 bằng 62: 1Các chỉ số trong cắt chuỗi có thiết lập mặc định khá hữu ích, có 2 chỉ số bị bỏ qua theo mặc định, là 0 và kích thước của chuỗi được cắt. 2Một cách khác để ghi nhớ cách thức cắt chuỗi làm việc là hình dung các chỉ số như là vách ngăn giữa các ký tự, với ký tự ngoài cùng bên trái được đánh số 0. Khi đó, ký tự cuối cùng bên phải, trong chuỗi n ký tự sẽ có chỉ số n, ví dụ: 3Hàng đầu tiên của số mang đến vị trí của chỉ số từ 0 đến 6 trong chuỗi. Hàng thứ hai là các chỉ số âm tương ứng. Khi cắt từ i đến j sẽ bao gồm tất cả các ký tự nằm giữa i và j, tương ứng. Đối với các chỉ số không âm, chiều dài của một lát cắt là sự chênh lệch của các chỉ số, nếu cả hai đều nằm trong giới hạn. Ví dụ, chiều dài của word[1:3] là 2. Cố gắng sử dụng một chỉ mục quá lớn sẽ trả về kết quả lỗi: 4Tuy nhiên, các chỉ mục bên ngoài phạm vi lát cắt vẫn được xử lý gọn gàng khi được sử dụng để cắt: 5Thay đổi hoặc xóa chuỗiCác chuỗi Python không thể thay đổi - chúng là cố định. Vì vậy, nếu cứ cố tình gán một ký tự nào đó cho vị trí đã được lập chỉ mục thì bạn sẽ nhận được thông báo lỗi: 6Nếu cần một chuỗi khác, cách tốt nhất là tạo mới: 7Bạn không thể xóa hay loại bỏ ký tự khỏi chuỗi, nhưng giống như tuple, bạn có thể xóa toàn bộ chuỗi, bằng cách sử dụng từ khóa del: 8Nối chuỗiCác chuỗi có thể được nối với nhau bằng toán tử 63 và thay thế bằng 64: 9Hai hoặc nhiều ký tự dạng chuỗi (tức là ký tự trong dấu nháy) cạnh nhau được nối tự động. 0Tính năng trên chỉ làm việc với chuỗi dạng chuỗi (literal), không áp dụng với biến hay biểu thức: 1Nếu muốn ghép nối các biến với nhau hoặc biến với chuỗi hãy sử dụng dấu 63: 2Tính năng này đặc biệt hữu ích khi muốn bẻ các chuỗi dài thành chuỗi ngắn hơn: 3Nếu muốn nối các chuỗi trong nhiều dòng khác nhau, hãy sử dụng dấu ngoặc đơn: 4Lặp và kiểm tra phần tử của chuỗiGiống list và tuple, bạn cũng sử dụng vòng lặp for khi cần lặp qua một chuỗi, như ví dụ đếm số ký tự "i" trong chuỗi dưới đây: 5Để kiểm tra một chuỗi con có trong chuỗi hay chưa, hãy dùng từ khóa in, như sau: 6Hàm Python tích hợp sẵn để làm việc với chuỗiCó 2 hàm thường dùng nhất khi làm việc với string trong Python là enumerate() và len(). Hàm 66 được tích hợp trong Python, sẽ trả về độ dài của chuỗi: 7Hàm enumerate() trả về đối tượng liệt kê, chứa cặp giá trị và index của phần tử trong string, khá hữu ích trong khi lặp. 8Phương thức format() để định dạng chuỗiPhương thức format() rất linh hoạt và đầy sức mạnh khi dùng để định dạng chuỗi. Định dạng chuỗi chứa dấu {} làm trình giữ chỗ hoặc trường thay thế để nhận giá trị thay thế. Bạn cũng có thể sử dụng đối số vị trí hoặc từ khóa để chỉ định thứ tự. 9Ta có kết quả khi chạy code trên như sau: 0Phương thức format() có thể có những đặc tả định dạng tùy chọn. Chúng được tách khỏi tên trường bằng dấu :. Ví dụ, có thể căn trái <, căn phải > hoặc căn giữa ^ một chuỗi trong không gian đã cho. Có thể định dạng số nguyên như số nhị phân, thập lục phân; số thập phân có thể được làm tròn hoặc hiển thị dưới dạng số mũ. Có rất nhiều định dạng bạn có thể sử dụng. 1Định dạng chuỗi kiểu cũ: Bạn có thể định dạng chuỗi trong Python về phong cách sprintf() được sử dụng trong ngôn ngữ lập trình C bằng toán tử %. 2Phương thức thường được sử dụng trong stringCó rất nhiều phương thức được tích hợp sẵn trong Python để làm việc với string. Ngoài format() được đề cập bên trên còn có lower(), upper(), join(), split(), find(), replace(), v.v.... 34. Danh sách (list)Python cung cấp một loạt các dữ liệu phức hợp, thường được gọi là các chuỗi (sequence), sử dụng để nhóm các giá trị khác nhau. Đa năng nhất là danh sách (list). Cách tạo list trong PythonTrong Python, list được biểu diễn bằng dãy các giá trị, được phân tách nhau bằng dấu phẩy, nằm trong dấu []. Các danh sách có thể chứa nhiều mục với kiểu khác nhau, nhưng thông thường là các mục có cùng kiểu. 4List không giới hạn số lượng mục, bạn có thể có nhiều kiểu dữ liệu khác nhau trong cùng một list, như chuỗi, số nguyên, số thập phân,... 5Bạn cũng có thể tạo các list lồng nhau (danh sách chứa trong danh sách), ví dụ: 6Hoặc khai báo list lồng nhau từ đầu: 7Truy cập vào phần tử của listCó nhiều cách khác nhau để truy cập vào phần tử của một danh sách: Index (chỉ mục) của list: Sử dụng toán tử index [] để truy cập vào một phần tử của list. Index bắt đầu từ 0, nên một list có 5 phần tử sẽ có index từ 0 đến 4. Truy cập vào phần tử có index khác index của list sẽ làm phát sinh lỗi IndexError. Index phải là một số nguyên, không thể sử dụng float, hay kiểu dữ liệu khác, sẽ tạo lỗi TypeError. 8List lồng nhau có thể truy cập bằng index lồng nhau: 9Index âm: Python cho phép lập chỉ mục âm cho các chuỗi. Index -1 là phần tử cuối cùng, -2 là phần tử thứ 2 từ cuối cùng lên. Nói đơn giản là index âm dùng khi bạn đếm phần tử của chuỗi ngược từ cuối lên đầu. 0Cắt lát (slice) list trong PythonPython cho phép truy cập vào một dải phần tử của list bằng cách sử dụng toán tử cắt lát : (dấu hai chấm). Mọi hành động cắt list đều trả về list mới chứa những yếu tố được yêu cầu. 1Để cắt lát list, bạn chỉ cần sử dụng dấu : giữa 2 index cần lấy các phần tử. [1:5] sẽ lấy phần tử 1 đến 5, [:-8] lấy từ 0 đến phần tử -8,... Nếu thực hiện hành động cắt sau thì nó sẽ trả về một list mới là bản sao của list ban đầu: 2Thay đổi hoặc thêm phần tử vào listList cũng hỗ trợ các hoạt động như nối list: 3Không giống như chuỗi, bị gán cố định, list là kiểu dữ liệu có thể thay đổi. Ví dụ, bạn có thể thay đổi các mục trong list: 4Bạn cũng có thể cho thêm mục mới vào cuối list bằng cách sử dụng các phương thức, chẳng hạn như append(): 5Việc gán cho lát cũng có thể thực hiện và thậm chí có thể thay đổi cả kích thước của list hay xóa nó hoàn toàn: 6Hàm len() cũng có thể áp dụng với list: 7Xóa hoặc loại bỏ phần tử khỏi list trong PythonBạn có thể xóa một hoặc nhiều phần tử khỏi list sử dụng từ khóa del, có thể xóa hoàn toàn cả list. 8Bạn cũng có thể sử dụng remove() để loại bỏ những phần tử đã cho hoặc pop() để loại bỏ phần tử tại một index nhất định. pop() loại bỏ phần tử và trả về phần tử cuối cùng nếu index không được chỉ định. Điều này giúp triển khai list dưới dạng stack (ngăn xếp) (cấu trúc dữ liệu first in last out - vào đầu tiên, ra cuối cùng). Ngoài ra, phương thức clear() cũng được dùng để làm rỗng một list (xóa tất cả các phần tử trong list). 9Cách cuối cùng để xóa các phần tử trong một list là gán một list rỗng cho các lát phần tử. 0Phương thức list trong PythonNhững phương thức có sẵn cho list trong Python gồm:
Ví dụ: 1Ví dụ 2: 2List comprehension: Cách tạo list mới ngắn gọnList comprehension là một biểu thức đi kèm với lệnh for được đặt trong cặp dấu ngoặc vuông []. Ví dụ: 3Code trên tương đương với: 4Ngoài for, if cũng có thể được sử dụng trong một list comprehension của Python. Lệnh if có thể lọc các phần tử trong list hiện tại để tạo thành list mới. Dưới đây là ví dụ: 5Kiểm tra phần tử có trong list khôngSử dụng keyword in để kiểm tra xem một phần tử đã có trong list hay chưa. Nếu phần tử đã tồn tại, kết quả trả về là True, và ngược lại sẽ trả về False. 6Vòng lặp for trong listSử dụng vòng lặp for để lặp qua các phần tử trong list như ví dụ dưới đây: 7Kết quả trả về sẽ như sau: 8Các hàm Python tích hợp với listCác hàm Python tích hợp sẵn như all(), any(), enumerate(), len(), max(), min(), list(), sorted(),... thường được sử dụng với list để thực hiện những nhiệm vụ khác nhau.
5. TupleTuple trong Python là một chuỗi các phần tử có thứ tự giống như list. Sự khác biệt giữa list và tuple là chúng ta không thể thay đổi các phần tử trong tuple khi đã gán, nhưng trong list thì các phần tử có thể thay đổi. Tuple thường được sử dụng cho các dữ liệu không cho phép sửa đổi và nhanh hơn list vì nó không thể thay đổi tự động. Một tuple được định nghĩa bằng dấu ngoặc đơn (), các phần tử trong tuple cách nhau bằng dấu phẩy (,). Ví dụ: 9Bạn có thể sử dụng toán tử cắt [] để trích xuất phần tử trong tuple nhưng không thể thay đổi giá trị của nó. 0Chạy code trên ta được kết quả: 1Tuple hơn list ở điểm nào?Vì tuple và list khá giống nhau, nên chúng thường được sử dụng trong những tình huống tương tự nhau. Tuy nhiên, tuple vẫn có những lợi thế nhất định so với list, như:
Tạo một tupleTuple được tạo bằng cách đặt tất cả các phần tử của nó trong dấu ngoặc đơn (), phân tách bằng dấu phẩy. Bạn có thể bỏ dấu ngoặc đơn nếu muốn, nhưng nên thêm nó vào cho code rõ ràng hơn. Tuple không bị giới hạn số lượng phần tử và có thể có nhiều kiểu dữ liệu khác nhau như số nguyên, số thập phân, list, string,... 2Tạo tuple chỉ có một phần tử hơi phức tạp chút, nếu bạn tạo theo cách thông thường là cho phần tử đó vào trong cặp dấu () là chưa đủ, cần phải thêm dấu phẩy để chỉ ra rằng, đây là tuple. 3Truy cập vào các phần tử của tupleCó nhiều cách khác nhau để truy cập vào các phần tử của một tuple, khá giống với list, nên mình không lấy ví dụ cụ thể, các bạn có thể xem lại phần list nha. Index: Sử dụng toán tử index [] để truy cập vào phần tử trong tuple với index bắt đầu bằng 0. Nghĩa là nếu tuple có 6 phần tử thì index của nó sẽ bắt đầu từ 0 đến 5. Nếu cố gắn truy cập đến index 6, 7 thì sẽ tạo lỗi IndexError. Index bắt buộc phải là số nguyên, mà không thể là số thập phân hay bất kỳ kiểu dữ liệu nào khác, nếu không sẽ tạo lỗi TypeError. Những tuple lồng nhau được truy cập bằng cách sử dụng index lồng nhau: 4Index âm: Python cho phép lập chỉ mục âm cho các đối tượng dạng chuỗi. Index -1 tham chiếu đến phần tử cuối cùng, -2 là thứ 2 tính từ cuối tính lên. Cắt lát: Có thể truy cập đến một loạt phần tử trong tuple bằng cách sử dụng toán tử cắt lát : (dấu 2 chấm). Thay đổi một tupleKhông giống như list, tuple không thể thay đổi. Điều này có nghĩa là các phần tử của một tuple không thể thay đổi một khi đã được gán. Nhưng, nếu bản thân phần tử đó là một kiểu dữ liệu có thể thay đổi (như list chẳng hạn) thì các phần tử lồng nhau có thể được thay đổi. Chúng ta cũng có thể gán giá trị khác cho tuple (gọi là gán lại - reassignment). 5Bạn có thể dùng toán tử + để nối 2 tuple, toán tử * để lặp lại tuple theo số lần đã cho. Cả + và * đều cho kết quả là một tuple mới. 6Xóa tupleCác phần tử trong tuple không thể thay đổi nên chúng ta cũng không thể xóa, loại bỏ phần tử khỏi tuple. Nhưng việc xóa hoàn toàn một tuple có thể thực hiện được với từ khóa del như dưới đây: 7Phương thức và hàm dùng với tuple trong PythonPhương thức thêm phần tử và xóa phần tử không thể sử dụng với tuple, chỉ có 2 phương thức sau là dùng được:
8Các hàm dùng trong tuple khá giống với list, gồm có:
Kiểm tra phần tử trong tupleBạn có thể kiểm tra xem một phần tử đã tồn tại trong tuple hay chưa với từ khóa in. 9Lặp qua các phần tử của tuple trong PythonSử dụng vòng lặp for để lặp qua các phần tử trong tuple. 0Kết quả trả về sẽ như sau: 16. SetSet trong Python là tập hợp các phần tử duy nhất, không có thứ tự. Các phần tử trong set phân cách nhau bằng dấu phẩy và nằm trong dấu ngoặc nhọn {}. Nhớ kỹ rằng các phần tử trong set không có thứ tự. Nhưng các phần tử trong set có thể thay đổi, có thể thêm hoặc xóa phần tử của set. Set có thể được sử dụng để thực hiện các phép toán như tập hợp, giao,... Cách tạo setSet được tạo bằng cách đặt tất cả các phần tử trong dấu ngoặc nhọn, phân tách bằng dấu phẩy hoặc sử dụng hàm set(). Set không giới hạn số lượng phần tử, nó có thể chứa nhiều kiểu biến khác nhau, nhưng không thể chứa phần tử có thể thay đổi được như list, set hay dictionary. Ví dụ về set: 2Nếu thực hiện lệnh in như sau: 3Bạn sẽ nhận được kết quả: 4Set với nhiều kiểu dữ liệu hỗn hợp như sau: 5Tạo set rỗng có chút khó khăn. Cặp dấu {} sẽ tạo một dictionary trong Python. Để tạo set không có phần tử nào, ta sử dụng hàm set() mà không có đối số nào. 6Làm sao để thay đổi set trong PythonVì set là tập hợp các phần tử không có thứ tự nên chỉ mục chả có ý nghĩa gì với set. Do đó toán tử cắt [] sẽ không làm việc trên set. Nếu cố tình dùng, bạn sẽ nhận được thông báo lỗi như dưới đây: 7Để thêm một phần tử vào set, bạn sử dụng add() và để thêm nhiều phần tử dùng update(). Update() có thể nhận tuple, list, strring và set làm đối số. Trong mọi trường hợp, Set có giá trị duy nhất, các bản sao sẽ tự động bị loại bỏ. 8Xóa phần tử khỏi setBạn dùng discard() và remove() để xóa phần tử cụ thể khỏi set. Khi phần tử cần xóa không tồn tại trong set thì discard() không làm gì cả, còn remove() sẽ báo lỗi. 9Bạn có thể xóa và trả lại một mục bằng phương thức pop(). Set không có thứ tự, không có cách nào để xác định phần tử nào sẽ bị xóa, điều này diễn ra hoàn toàn ngẫu hứng. Việc xóa hoàn toàn set được thực hiện bằng cách dùng clear(). 00Các toán tử set trong PythonSet thường được sử dụng để chứa các toán tử tập hợp như hợp, giao, hiệu, bù. Có cả phương thức và toán tử để thực hiện những phép toán tập hợp này. Ta sẽ sử dụng 2 tập hợp dưới đây: 01Hợp của A và B là tập hợp tất cả các phần tử của A và B. Hợp được biểu diễn bằng cách sử dụng toán tử | hoặc sử dụng phương thức union(). 02Giao của A và B là tập hợp những phần tử chung của A và B. Để tìm giao của A và B ta có thể dùng toán tử & hoặc hàm intersection(). 03Hiệu của A và B (A-B) là tập hợp phần tử chỉ có trong A, không có trong B. Hiệu của B và A (B-A) là tập hợp phần tử chỉ có trong B không có trong A. Có thể sử dụng toán tử - hoặc hàm difference() để thực hiện phép toán tập hợp này. 04Bù của A và B là tập hợp những phần tử có trong A và B nhưng không phải phần tử chung của hai tập hợp này. Bạn có thể dùng toán tử ^ hoặc hàm symmetric_difference() để thực hiện phép bù. 05Các phương thức dùng trên setPhương thứcMô tảadd()Thêm một phần tử vào set.clear()Xóa tất cả phần tử của set.copy()Trả về bản sao chép của set.difference()Trả về set mới chứa những phần tử khác nhau của 2 hay nhiều set.difference_update()Xóa tất cả các phần tử của set khác từ set này.discard()Xóa phần tử nếu nó có mặt trong set.intersection()Trả về set mới chứa phần tử chung của 2 set.intersection_update()Cập nhật set với phần tử chung của chính nó và set khác.isdisjoint()Trả về True nếu 2 set không có phần tử chung.issubset()Trả về True nếu set khác chứa set này.issuperset()Trả về True nếu set này chưa set khác.pop()Xóa và trả về phần tử ngẫu nhiên, báo lỗi KeyError nếu set rỗng.remove()Xóa phần tử từ set. Nếu phần tử đó không có trong set sẽ báo lỗi KeyError.symmetric_difference()Trả về set mới chứa những phần tử không phải là phần tử chung của 2 set.symmetric_difference_update()Cập nhật set với những phần tử khác nhau của chính nó và set khác.union()Trả về set mới là hợp của 2 set.update()Cập nhật set với hợp của chính nó và set khác.Kiểm tra phần tử trong setBạn có thể kiểm tra một đối tượng xem nó có nằm trong set không, sử dụng từ khóa in. 06Lặp qua phần tử của setSử dụng vòng lặp for để lặp qua các phần tử của set. 07Chạy code trên bạn nhận được kết quả như sau: 08Hàm thường dùng trên setCác hàm thường dùng trên set bao gồm all(), any(), enumerate(), len(), max(), min(), sorted(), sum(). Chức năng của những hàm này khá giống với khi bạn sử dụng trên list, tuple, bạn có thể tham khảo thêm nếu chưa rõ nha. Frozenset trong PythonFrozenset là một lớp mới, có đặc điểm của một set, nhưng phần tử của nó không thể thay đổi được sau khi gán. Để dễ hình dung thì tuple là list bất biến còn frozenset là set bất biến. Các set có thể thay đổi được nhưng không thể băm (hash) được, do đó không thể sử dụng set để làm key cho dictionary. Nhưng frozenset có thể băm được nên có thể dùng như các key cho dictionary. Frozenset có thể tạo bằng hàm frozenset(). Kiểu dữ liệu này hỗ trợ các phương thức như copy(), difference(), intersection(), isdisjoint(), issubset(), issuperset(), symmetric_difference() và union(). Vì không thể thay đổi nên phương thức add() hay remove() không sử dụng được trên frozenset. 7. DictionaryDictionary là tập hợp các cặp khóa giá trị không có thứ tự. Nó thường được sử dụng khi chúng ta có một số lượng lớn dữ liệu. Các dictionary được tối ưu hóa để trích xuất dữ liệu với điều kiện bạn phải biết được khóa để lấy giá trị. Cách tạo dictionary trong PythonTrong Python, dictionary được định nghĩa trong dấu ngoặc nhọn {} với mỗi phần tử là một cặp theo dạng key:value. Key và value này có thể là bất kỳ kiểu dữ liệu nào. Bạn cũng có thể tạo dictionary bằng cách sử dụng hàm dict() được tích hợp sẵn. Ví dụ: 09Khi thực hiện kiểm tra kiểu dữ liệu của d ta được kết quả: 10Truy cập phần tử của dictionaryCác kiểu dữ liệu lưu trữ khác sử dụng index để truy cập vào các giá trị thì dictionary sử dụng các key. Key có thể được sử dụng trong cặp dấu ngoặc vuông hoặc sử dụng get(). Sử dụng khóa để trích xuất dữ liệu: 11Chạy đoạn code trên ta sẽ được kết quả: 12Thay đổi, thêm phần tử cho dictionaryDictionary có thể thay đổi, nên có thể thêm phần tử mới hoặc thay đổi giá trị của các phần tử hiện có bằng cách sử dụng toán tử gán. Nếu key đã có, giá trị sẽ được cập nhật, nếu là một cặp key: value mới thì sẽ được thêm thành phần tử mới. 13Xóa phần tử từ dictionaryBạn có thể xóa phần tử cụ thể của dictionary bằng cách sử dụng pop(), nó sẽ phần tử có key đã cho và trả về giá trị của phần tử. popitem() có thể xóa và trả về một phần tử tùy ý dưới dạng (key, value). Tất cả các phần tử trong dictionary có thể bị xóa cùng lúc bằng cách dùng clear(). Ngoài ra, từ khóa del cũng có thể dùng để xóa một phần tử hoặc toàn bộ dictionary. 14Các phương thức và hàm cho dictionaryĐây là những phương thức thường dùng với dictionary: MethodMô tảclear()Xóa tất cả phần tử của dictionary.copy()Trả về một bản sao shollow copy của dictionary.fromkeys(seq[,v])Trả về dictionary mới với key từ seq và value bằng v (default là 67).get(key[,d])Trả về giá trị của key, nếu key không tồn tại, trả về d. (default là 67).items()Trả lại kiểu xem mới của các phần tử trong dictionary (key, value).keys()Trả về kiểu xem mới của các key trong dictionary.pop(key[,d])Xóa phần tử bằng key và trả về giá trị hoặc d nếu key không tìm thấy. Nếu d không được cấp, key không tồn tại thì sẽ tạo lỗi 69.popitem()Xóa và trả về phần tử bất kỳ ở dạng (key, value). Tạo lỗi 69 nếu dictionary rỗng.setdefault(key,[,d])Nếy key tồn tại trả về value của nó, nếu không thêm key với value là d và trả về d (default là 67).update([other])Cập nhật dictionary với cặp key/value từ other, ghi đè lên các key đã có.values()Trả về kiểu view mới của value trong dictionary.Các hàm tích hợp như all(), any(), len(), cmp(), sorted(),... thường được sử dụng với dictionary để thực hiện những nhiệm vụ khác nhau. Dictionary comprehension trong PythonDictionary comprehension là cách đơn giản, rút gọn để tạo dictionary mới từ một vòng lặp trong Python. Câu lệnh sẽ bao gồm một cặp biểu thức (key:value) cùng câu lệnh for, tất cả đặt trong dấu {}. Dưới đây là ví dụ tạo dictionary với mỗi pahàn tử là một cặp số và lập phương của nó. 15Chương trình trên tương đương với 16Bạn cũng có thể sử dụng lệnh if trong dictionary comprehension. Lệnh if có thể lọc những phần tử trong dictionary hiện có để tạo thành dictionary mới như ví dụ dưới đây: 17Kiểm tra và lặp qua phần tử trong dictionaryBạn chỉ có thể kiểm tra key của phần tử đã có trong dictionary hay chưa bằng cách dùng in, và không thể làm điều đó với value. 18Bạn có thể sử dụng vòng lặp for để lặp qua key của các phần tử trong dictionary. 19Chạy code trên, các giá trị tương ứng với từng key sẽ được in ra màn hình theo thứ tự của key. 8. Chuyển đổi giữa các kiểu dữ liệuChúng ta có thể chuyển đổi giữa các kiểu dữ liệu khác nhau bằng cách sử dụng hàm chuyển đổi kiểu khác nhau như int() (kiểu số nguyên), float() số thập phân, str() chuỗi,... Ví dụ: 20Chuyển đổi từ kiểu float sang kiểu int sẽ bị giảm giá trị (làm cho nó gần với số không hơn). Ví dụ: 21Chuyển đổi từ string sang hoặc ngược lại phải có các giá trị tương thích. Bạn có thể thực hiện chuyển đổi chuỗi này sang chuỗi khác: 22Để chuyển đổi sang dictionary, mỗi phần tử phải là một cặp như ví dụ dưới đây: 239. Bước đầu tiên hướng tới lập trìnhTất nhiên, chúng ta có thể sử dụng Python cho những tác vụ phức tạp hơn là thêm vài phần tử vào chuỗi. Ví dụ, có thể viết một chuỗi con của dãy Fibonacci (dãy vô hạn các số tự nhiên bắt đầu bằng hai phần tử 0 và 1 hoặc 1 và 1, các phần tử sau đó được thiết lập bằng cách cộng hai phần tử trước nó lại) như sau: 24Ví dụ này giới thiệu một số tính năng mới:
25Có thể sử dụng thêm đối số end cho hàm print() để tránh thêm dòng mới trong kết quả đầu ra hoặc kết thúc kết quả với một chuỗi khác: 26Đến đây các bạn đã bắt đầu hình dung được phần nào về Python rồi đúng không? Hãy cùng chờ đón những bài học tiếp theo về các câu lệnh, cấu trúc dữ liệu trong Python nhé.
Thứ Hai, 10/10/2022 09:52 4,7 ★ 44 👨 267.814 #Python 3 Bình luận Sắp xếp theo Xóa Đăng nhập để Gửi
Bạn nên đọc
Python
Python 3
Giới thiệu | Điều khoản | Bảo mật | Hướng dẫn | Ứng dụng | Liên hệ | Quảng cáo | Facebook | Youtube | DMCA Giấy phép số 362/GP-BTTTT. Bộ Thông tin và Truyền thông cấp ngày 30/06/2016. Cơ quan chủ quản: CÔNG TY CỔ PHẦN MẠNG TRỰC TUYẾN META. Địa chỉ: 56 Duy Tân, Dịch Vọng Hậu, Cầu Giấy, Hà Nội. Điện thoại: 024 2242 6188. Email: [email protected]. Chịu trách nhiệm nội dung: Lê Ngọc Lam. Bản quyền © 2003-2022 QuanTriMang.com. Giữ toàn quyền. Không được sao chép hoặc sử dụng hoặc phát hành lại bất kỳ nội dung nào thuộc QuanTriMang.com khi chưa được phép. |