Set trong Python là gì
Trong toán học, là khái niệm không thể định nghĩa. Ta hiểu tập hợp như sự tụ tập các đối tượng nào đó, mà ta gọi là các phần tử. Kiểu dữ liệu tập hợp set trong Python cũng giống như vậy, là một tập các phần tử trong đó mỗi phần tử chỉ xuất hiện đúng một lần. Hiểu đơn giản như kể tên các học sinh trong một lớp, mỗi học sinh đương nhiên chỉ được kể một lần, và ta không cần theo thứ tự nào cả; lúc này, ta cần đến kiểu tập hợp. Show
1. Cách khai báo kiểu tập hợp set trong PythonĐể tạo một tập hợp set ta có cú pháp khá giống với kiểu từ điển dictionary, với các phần tử trong cặp ngoặc nhọn cách nhau bởi dấu phẩy. Tuy nhiên, mỗi phần tử của set là một giá trị (thay cho một cặp giá trị như với dictionary), ví dụ: >>> A = {1, 7, 2, 6, 4, 5} >>> my_set = {1.0, "Hello", (1, 2, 3)} >>> my_set {1.0, 'Hello', (1, 2, 3)}Kiểu tập hợp set trong Python có các đặc điểm sau:
Tập hợp set là dữ liệu thay đổi được mutable, tuy nhiên bản thân mỗi phần tử trong set thì lại không thể thay đổi immutable được. Tức là, các phần tử của một set chỉ có thể là các kiểu dữ liệu không thay đổi được immutable như các kiểu số, kiểu chuỗi… mà không thể là kiểu danh sách, từ điển. Như ví dụ sau, chúng ta cố gắng gán một phần tử của tập my_set là một danh sách [3, 4] thì Python báo lỗi kiểu dữ liệu ngay lập tức. >>> my_set = {1, 2, [3, 4]} Traceback (most recent call last): File "Python cũng có loại tập hợp không thay đổi được immutable set gọi là frozenset. Truy cập các phần tử của một tập hợp set trong PythonBạn không thể truy cập các phần tử trong một tập hợp bằng cách sử dụng chỉ mục index như kiểu danh sách list, nhưng bạn có thể duyệt qua lần lượt các phần tử của nó bằng cách sử dụng vòng lặp for cùng với toán tử in để kiểm tra một đối tượng nào đó có thuộc về tập hợp đã cho không. >>> thisset = {"apple", "banana", "cherry"} >>> for x in thisset: ... print(x) ... cherry banana apple2. Các toán tử và phương thức trên kiểu tập hợp setGiả sử S, S1 và S2 là các tập hợp, x là một phần tử: 2.1. Toán tử inSử dụng cú pháp x in S để kiểm tra phần tử x có nằm trong tập S hay không. Trả về kết quả True nếu tập S chứa phần tử x, False nếu S không chứa x. >>> S = {1, 3, 2, 8, 10} >>> 1 in S True >>> 4 in S False2.2. Hàm len()Hàm len(S)trả về số lượng phần tử của tập S, kết quả trả về là một số nguyên không âm. >>> S = {1, 3, 2, 8, 10} >>> len(S) 5 >>> A = set() #tập A là tập rỗng >>> len(A) 02.3. Các phương thức add, remove, discard, pop, clear
Chú ý rằng, tập hợp không được đánh chỉ mục nên bạn sẽ không thể biết được phần tử nào đứng đầu tiên, Python có quy luật riêng để quyết định phần tử nào đứng đầu tiên. Như trong ví dụ trên, bạn nhập vào phần tử 2 đầu tiên, nhưng Python lại lưu trong bộ nhớ phần tử 1 ở vị trí đầu tiên.
Chú ý rằng hai thủ tục remove(x) và discard(x) cùng xóa đi phần tử x, nhưng sự khác nhau ở đây là nếu tập S không tồn tại phần tử x thì phương thức:
Hãy xem ví dụ sau để hiểu rõ hơn. >>> S = {'a', 'b', 'c', 'd'} >>> S.discard('e') #Không hiển thị gì, dùng print để xem kết quả >>> print(S.discard('e')) None >>> S.remove('e') Traceback (most recent call last): File "2.3. Các phép toán trên kiểu tập hợp set trong PythonPhép lấy hiệu hai tập hợp set trong PythonPhép lấy hiệu hai tập hợp S1 và S2, sử dụng cú pháp S1-S2 hoặc S1.difference(S2). Kết quả trả về là một tập mới chứa các phần tử thuộc tập S1 và không thuộc tập S2. Một phép toán tương tự là S1.symmetric_difference(S2) hoặc S1^S2 có tác dụng như S2 – S1. Phép lấy hợp hai tập hợp set trong PythonSử dụng cú pháp S1|S2 hoặc S1.union(S2) để lấy hợp hai tập hợp S1 và S2. Kết quả trả về một tập mới chứa tất cả các phần tử thuộc tập S1 và tất cả các phần tử thuộc tập S2. Đương nhiên, nếu phần tử nào đó thuộc cả hai tập hợp thì chỉ được kể một lần. >>> S1 = {1, 2, 3, 4, 5, 6} >>> S2 = {0, 2, 4, 6, 8, 10} >>> S1|S2 {0, 1, 2, 3, 4, 5, 6, 8, 10} #Hợp của S1 và S2Phép lấy giao hai tập hợp set trong PythonSử dụng cú pháp S1 & S2 hoặc S1.intersection(S2) để lấy giao hai tập hợp S1 và S2. Kết quả trả về một tập mới chứa tất cả các phần tử thuộc đồng thời cả hai tập S1 và S2. Tức là các phần tử chung của hai tập hợp đó. >>> S1 = {1, 2, 3, 4, 5, 6} >>> S2 = {0, 2, 4, 6, 8, 10} >>> S1&S2 {2, 4, 6} #Giao của S1 và S2 gồm ba phần tử 2, 4, 6Toán tử kiểm tra tập conĐể kiểm tra tập S1 có là tập con của S2 hay không, ta sử dụng cú pháp S1<= S2 hoặc S1.issubset(S2). Kết quả trả về là kiểu Boolean True nếu đúng và False nếu sai. Nhắc lại rằng, tập S1 là tập con của S2 nếu mọi phần tử của S1 đều là phần tử của S2 (tức là cũng thuộc tập S2). >>> S1 = {1, 2, 3, 4, 5, 6, 7} >>> S2 = {1, 2, 5} >>> S3 = {1, 2, 5, 9} >>> S4 = set() >>> S1.issubset(S1) #Mọi tập đều là tập con của chính bản thân nó True >>> S2.issubset(S1) True >>> S3.issubset(S1) False >>> S4.issubset(S1) #Tập rỗng là tập con của mọi tập hợp TrueNgược lại của tập con, chúng ta có thể sử dụng S1 >= S2 hoặc S1.issupperset(S2) để kiểm tra S1 có là tập cha của (tức là có chứa) S2 hay không, trả về True nếu đúng và False nếu sai. Tập S1 là tập cha của S2 nếu mọi phần tử của S2 đều thuộc tập S1. >>> S1 = {1, 2, 3, 4, 5, 6, 7} >>> S2 = {1, 2, 5} >>> S3 = {1, 2, 5, 9} >>> S4 = set() >>> S1.issupperset(S1) #Mọi tập đều là tập cha của chính bản thân nó True >>> S1.issupperset(S2) True >>> S1.issupperset(S3) False >>> S1.issupperset(S4) TrueTập con thực sự, tập cha thực sựSử dụng cú phsp S1 3. Bài tập kiểu tập hợp set trong PythonBài 1. Cô giáo Thảo thống kê chiều cao của các học sinh trong lớp 12A được kết quả như sau:
Bài 2. Liệt kê tập hợp S gồm các kí tự của câu sau, kể cả dấu cách trắng: Mọc giữa dòng sông xanh Một bông hoa tím biếc Ơi con chim chiền chiện Hót chi mà vang trời Từng giọt long lanh rơi Tôi đưa tay hứng về.Tập hợp S có bao nhiêu phần tử. Thêm vào tập S các phần tử là các kí tự xuất hiện trong câu sau Bài 3. Cho tập hợp A gồm có các phần tử sau, mỗi phần tử cách nhau bởi dấu cách trắng: 1 a 5 7 f 0 89 g i 11 88 3 pLiệt kê các tập con có hai phần tử của tập hợp A. Có tất cả bao nhiêu tập con như vậy. Bài 4. Một lớp có 40 học sinh trong đó có 10 bạn học tiếng Pháp, 14 bạn học tiếng Anh, 6 bạn học cả hai thứ tiếng đó. Hỏi có bao nhiêu học sinh không học tiếng Pháp mà cũng không học tiếng Anh. Bài 5. Trong một lớp học mỗi học sinh đều chơi thể bóng đá hoặc bóng chuyền. Có 25 học sinh chơi bóng đá, 27 học sinh chơi bóng chuyền và 18 học sinh chơi cả hai. Hỏi lớp đó có bao nhiêu học sinh? |