Các toán tử thường dùng trong Set
Trong phần trước ta đã học các khái niệm về set, thêm và xóa các phần tử trong set. Nếu bạn nào chưa nắm rõ về set thì có thể xem tại link bài viết này. Ok, bây giờ chúng ta sẽ nghiên cứu về các toán tử trong Set.
Toán tử trong Set
Set() trong Python được hỗ trợ một số toán tử giúp chúng ta có thể truy xuất dữ liệu một cách nhanh chóng. Các bạn cùng xem ví dụ sau:
>>> taphop = {2, 4, 5, 9, 12, 22, 25, 60, 89, 120, 199}
>>> 60 in taphop #1
True
>>> 28 in taphop
False
>>> new_set = {1, 3, 6, 9, 12, 13, 25, 26}
>>> taphop.union(new_set) #2
{89, 1, 2, 3, 4, 5, 6, 199, 9, 12, 13, 22, 120, 25, 26, 60}
>>> taphop.intersection(new_set) #3
{9, 12, 25}
>>> taphop.difference(new_set) #4
{2, 4, 5, 199, 22, 120, 89, 60}
>>> taphop.symmetric_difference(new_set) #5
{89, 1, 2, 3, 4, 5, 6, 199, 13, 22, 120, 26, 60}
- Để kiểm tra giá trị có trong set hay không bạn sử dụng in
- Phương thức union() trả về một set mới chứa tất cả các phần tử của hai set
- Phương thức intersection() trả về một set mới chỉ chứa những phần tử nào thuộc cả hai set
- Phương thức difference trả về một set mới chỉ chứa những phần tử có trong set taphop nhưng không có trong new_set
- Phương thức symmetric_difference trả về một set mới chứa tất cả những phần tử không chung giá trị ở cả hai set.
Cả ba phương thức trên đều là đối xứng (symmetric)
Ok, tới đây bạn cũng nắm được một phần về cách sử dụng các phương thức trên rồi. Nhưng nếu ta đảo ngược vị trí của new_set và taphop thì sẽ như thế nào?
>>> new_set.symmetric_difference(taphop)
{89, 1, 2, 3, 4, 5, 6, 199, 13, 22, 120, 26, 60}
>>> new_set.symmetric_difference(taphop) == taphop.symmetric_difference(new_set) #1
True
>>> new_set.union(taphop) == taphop.union(new_set) #2
True
>>> new_set.intersection(taphop) == taphop.intersection(new_set) #3
True
>>> new_set.difference(taphop) == taphop.difference(new_set) #4
False
- symmetric_difference() đối xứng, vì vậy kết quả trả về True
- union() đối xứng
- intersection() đối xứng
- difference() thì không đối xứng. Bởi vì kết quả trả về chỉ chứa những kết quả trong new_set có mà taphop không có và ngược lại
Để giúp các bạn hiểu rõ hơn các toán tử trên, mình vẽ một sơ đồ như sau:
Python cũng cung cấp sẵn cho ta 2 method đặc biệt để kiểm tra xem tất cả phần tử của set này có thuộc phần tử của set kia hay không và ngược lại, bằng 2 method: issubset() và issuperset()
>>> a_set = {'a', 'b', 'c'}
>>> b_set = {'a', 'b', 'c', 'd'}
>>> a_set.issubset(b_set) #1
True
>>> b_set.issuperset(a_set) #2
True
>>> a_set.add('e') #3
>>> a_set.issubset(b_set)
False
>>> b_set.issuperset(a_set)
False
- a_set là con của b_set vì tất cả phần tử của a_set đều có trong b_set
- Ngược lại thì b_set là cha của a_set vì tất cả phần tử của a_set đều có trong b_set
- Nếu bạn thêm một phần tử mới vào a_set mà b_set không có, thì lúc này a_set không còn là con của b_set nữa và ngược lại
Ruby
Cảm ơn bài viết của bạn đã làm tôi hiểu hơn về set.
Từ Anh Vũ
Rất vui được giúp bạn, mong bạn sẽ theo dõi và trao đổi kinh nghiệm với tôi ở các bài tiếp theo.