Set trong Python
Các đặc điểm của set
- Được giới hạn bởi cặp ngoặc (
{}), các phần tử trongsetđược ngăn cách bằng dấu phẩy (,).
Setkhông có thứ tự vì vậy các phương thứcindexingvàslicesẽ không được hỗ trợ trongset.
- Các phần tử của
setlà duy nhất, không được phép trùng lặp.
Setcó thể sửa đổi (mutable) nhưng các phần tử trongsetphải thuộc loại không thể thay đổi (immutable), vì vậysetkhông thể chứa 1setkhác.
>>> a = {1, 'a', (1, 2, 3)}
# set có thể chứa nhiều kiểu dữ liệu khác nhau
>>> type(a)
# <class 'set'>
>>> b = {[1, 2], [3, 4]}
# set không thể chứa list vì list và đối tượng `mutable`
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
Khởi tạo set
- Sử dụng cặp ngoặc
{}và đặt giá trị bên trong
set_x = {<value_1>, <value_2>, .., <value_n>}
- Sử dụng set contructor
set(iterable)
>>> a = set((1, 2, 3, 4))
# khởi tạo set từ đối tượng tuple
>>> a
{1, 2, 3}
>>> b = set('aaaaaaaa')
# khởi tạo set từ đối tượng string
>>> b
{'a'}
- Sử dụng set comprehension
>>> a = { value for value in range(3)}
>>> a
{0, 1, 2}
Toán tử trong set
- Toán tử
inTrả vềTruenếuvaluetồn tại trongset. Ngược lại trả vềFalse.
>>> 1 in {1, 2, 3, 4}
True
>>> 5 in {1, 2, 3, 4}
False
- Toán tử
not inNgược với toán tửin. Trả vềTruenếuvaluekhông tồn tại trongset, ngược lại sẽ trả vềFalse.
>>> 1 not in {1, 2, 3, 4}
False
>>> 5 not in {1, 2, 3, 4}
True
- Toán tử
-
set1 - set2 - ..... - setn
Trả về một
set gồm các phần tử chỉ tồn tại trong set1 mà không tồn tại trong set2...setn.>>> set1 = {1, 2, 3, 4, 5}
>>> set2 = {1, 2, 3}
>>> set1 - set2
{4, 5}
- Toán tử
&
set1 & set2 & ..... & setn
Trả về một
set chứa các phần tử cùng tồn tại trong cả tất cả các set.>>> set1 = {1, 2, 3, 4, 5}
>>> set2 = {1, 2, 3}
>>> set1 & set2
{1, 2, 3}
- Toán tử
|
set1 | set2 | ... | setn
Trả về một
set chứa tất cả các phần tử tồn tại trong các set và chỉ giữ lại 1 giá trị duy nhất của các phần tử trùng.>>> set1 = {1, 2, 3, 4, 5}
>>> set2 = {1, 2, 3}
>>> set1 | set2
{1, 2, 3, 4, 5}
- Toán tử
^
set1 ^ set2 ..... ^ setn
Trả về một
set chứa tất cả các phần tử chỉ tồn tại ở một set mà không tồn tại trong các set khác, nghĩa là các phần tử trùng lặp sẽ bị loại bỏ.>>> set1 = {1, 2, 3, 4, 5}
>>> set2 = {1, 2, 3}
>>> set1 ^ set_2
{4, 5}
- Toán tử
==và!=
set1 [==, !=] set2 ...... [==, !=] setn
So sánh hai hay nhiều
set với nhau. Các phép toán thực hiện từ trái qua phải.>>> a = {1,2,3}
>>> b = set({i for i in range(1,4)})
>>> a == b
True
>>> a != b
False
Các phương thức được dựng sẵn trong set
| Phương thức | Miêu tả |
|---|---|
| set.add() | Thêm một phần tử vào set |
| set.clear() | Xóa tất cả phần tử khỏi set |
| set.copy() | Trả về một bản sao của set |
| set.difference() | Trả về một set mới chứa các phần tử khác biệt giữa hai hay nhiều set |
| set.difference_update() | Xóa tất cả các thành phần của set khác tồn tại trong set này |
| set.discard() | Xóa một phần tử khỏi set nếu nó tồn tại trong set |
| set.intersection() | Trả về một set mới chứa các phần tử giống nhau giữa 2 set |
| set.intersection_update() | Cập nhật set với các phần tử giống nhau giữa nó và set khác |
| set.isdisjoint() | Trả về True nếu 2 set không có phần tử giống nhau |
| set.issubset() | Trả về True nếu set khác chứa các phần tử của set này |
| set.issuperset() | Trả về True nếu set này chứa các phần tử của set khác |
| set.pop() | Loại bỏ và trả về một phần tử tùy ý.Tạo ra keyError nếu set rỗng |
| set.remove() | Loại bỏ một phần tử khỏi set. Nếu phần tử không tồn tại tạo ra KeyError |
| set.symmetric_difference() | Trả về set mới chứa phần tử khác biệt đối xứng giữa 2 set |
| set.symmetric_difference_update() | Cập nhật một set với các phần tử khác biệt đối xứng giữa nó và set khác |
| set.union() | Trả về sự kết hợp của các set trong một set mới |
| set.update() | Cập nhật các thiết lập với sự kết hợp của chính nó và set khác |
1. set.add(element)
Thêm một đối tượng
element vào set, element phải là đối tượng immutable. Nếu element đã có trong set, element sẽ không được thêm vào.>>> a = {1, 2, 3}
>>> a.add(4)
>>> a
{1, 2, 3, 4}
2. Set.clear()
Phương thức này loại bỏ tất cả các phần tử của
set.>>> a = {1, 2, 3, 4}
>>> a.clear()
>>> a
{}
3. Set.copy()
Trả về một bản sao của
set>>> a = {1, 2, 3, 4}
>>> b = a.copy()
>>> b
{1, 2, 3, 4}
Bạn cũng có thể sao chép
set bằng cách sử dụng toán tử =.Tuy nhiên nó sẽ không tạo ra một đối tượng mới mà sẽ trỏ về giá trị set ban đầu, nên khi bạn thay đổi new_set thì set cũng sẽ bị thay đổi.>>> a = {1, 2, 3, 4}
>>> b = a
>>> b.add(5)
>>>b
{1, 2, 3, 4, 5}
>>>a
{1, 2, 3, 4, 5}
4. Set1.difference(set2[, set3...])
Tương đương với:
set1 - set2 [-set3....]
Phương thức này trả về tập hợp các phần tử có trong
set1 nhưng không tồn tại trong 2 hay nhiều set khác.>>> a = {1, 2, 3, 4}
>>> b = {4, 5, 6}
>>> a.difference(b)
{1, 2, 3}
>>> a - b
{1, 2, 3}
Bạn cũng có thể chỉ định nhiều hơn 2
set. Khi đó thao tác được thực hiện từ trái sang phải.>>> a = {1, 2, 3, 4}
>>> b = {4, 5, 6}
>>> c = {4, 3, 9}
>>> a .difference(b, c)
{1, 2}
>>> a - b - c
{1, 2}
5. Set1.difference_update(set2[,set3...])
Phương thức cập nhật giá trị
set1 đã loại bỏ các phần tử tìm thấy trong set2 hoặc các set khác.>>> a = {1, 2, 3, 4}
>>> b = {4, 5, 6}
>>> a .difference_update(b)
>>> a
{1, 2}
>>> a -= b
{1, 2}
6. Set.discard(element)
Phương thức loại bỏ phần tử
element từ set. Nếu element không tồn tại, phương thức sẽ không làm gì thay vì tạo ra một ngoại lệ.>>> a = {1, 2, 3, 4}
>>> a.discard(4)
>>> a
{1, 2, 3}
>>> a.discard(5)
>>> a
{1, 2, 3}
7. Set1.intersection(set2[, set3....])
Tương đương với:
set & set2 [&set3....]
Phương thức tính giao điểm của hai hay nhiều
set. hay nói cách khác, phương thức sẽ trả về tập hợp các phần tử đều tồn tại trong 2 hay nhiều set. Nếu không có phần tử nào trả về một set rỗng.>>> a = {1, 2, 3, 4}
>>> b = {4, 5, 6}
>>> a.intersection(b)
{4}
8. Set1.intersection_update(set2[, set3...])
Hay còn có thể biểu diễn theo các khác
set1 &= set2[&set3.....]
Phương thức cập nhật
set1, chỉ giữ lại các phần tử được tìm thấy trong cả hai set.>>> a = {1, 2, 3, 4}
>>> b = {4, 5, 6}
>>> a.intersection_update(b)
>>> a
{4}
>>> a &= b
{4}
9. Set1.isdisjoint(set2)
Phương thức trả về
True nếu set1 và set2 không có phần tử chung, ngượi lại False.>>> a = {1, 2, 3, 4}
>>> b = {4, 5, 6}
>>> a.isdisjoint(b)
False
>>> a.isdisjoint(b- {4})
True
Nếu phương thức trả về
True có nghĩa là phép toán set1 & set2 sẽ trả về set rỗng.>>> a = {1, 2, 3, 4}
>>> b = {5, 6}
>>> a & b
set()
10. Set1.issubset(set2)
Tương đương với:
set1 < set2 ... < setn
Phương thức trả về
True nếu set1 là tập hợp con của set2.>>> a = {1, 2, 3, 4}
>>> b = {1, 2, 3, 4, 5, 6}
>>> a.issubnet(b)
True
Một
set được coi là tập hợp con của chính nó.>>> a = {1, 2, 3, 4}
>>> a.issubnet(a)
True
11. Set1.issuperset(set2)
Tương đương với:
set1 > set2 > ..... > setn
Phương thức trả về
True nếu set2 là tập hợp con của set1. Ngược lại trả về False>>> a = {1, 2, 3, 4, 5 ,6}
>>> b = {1, 2, 3, 4}
>>> a.issuperset(b)
True
12. Set.pop()
Phương thức sẽ loại bỏ và trả về một phần tử được chọn tùy ý từ
set. nếu set rỗng, phương thức sẽ tạo ra một ngoại lệ.>>> a = {1, 2, 3, 4, 5 ,6}
>>> a.pop()
6
>>> b = set()
>>> b.pop()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'pop from an empty set'
13. Set.remove(element)
Phương thức loại bỏ phần tử
element từ set và tạo ra một ngoại lệ nếu element không tồn tại trong set.>>> a = {1, 2, 3, 4, 5 ,6}
>>> a.remove(6)
>>> a
{1, 2, 3, 4, 5}
>>> a.remove(7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 7
14. Set1.symmetric_difference(set2)
Tương đương với:
set1 ^ set2 ..... ^ setn
Phương thức trả về tập hợp loại bỏ các phần tử chung giữa
set1 và set2.>>> a = {1, 2, 3, 4, 5 ,6}
>>> b = {5 ,6, 7, 8}
>>> a.symmetric_difference(b)
{1, 2, 3, 4, 7, 8}
15. Set1.symmtric_diffence_update(set2)
Phương thức cập nhật
set1 loại bỏ các phần tử giống nhau giữa set1 và set2 hoặc giữa set1 và các set khác.>>> a = {1, 2, 3, 4, 5 ,6}
>>> b = {5 ,6, 7, 8}
>>> a.symmetric_difference_update(b)
>>> a
{1, 2, 3, 4, 7, 8}
16. Set1.union(set2[, set3....])
Tương đương với:
Set1 | set2 [| set3...]
Phương thức trả về tập hợp tồn tại trong cả hai hay nhiều
set.>>> a = {1, 2, 3, 4, 5 ,6}
>>> b = {5 ,6, 7, 8}
>>> c = {9, 10}
>>> a.union(b, c)
{1, 2, 3, 4, 5 ,6, 7, 8, 9, 10}
>>> a | b | c
{1, 2, 3, 4, 5 ,6, 7, 8, 9, 10}
17. S1.update(set2[, set3....])
Tương tự với:
Set1 |= set2 [| set3.....]
Phương thức thêm vào
set1 những phần tử có trong nhưng set khác mà không có trong set1 và không có giá trị trả về (trả về None) . Nếu bạn muốn thêm các tập hợp mà không phải set(như list, string, tuple, dict...) bạn chỉ cần dùng cú pháp:set.update(set(X))
# Hoặc
set.update(X)
# X có thể là list, string...
>>> a = {1, 2, 3, 4, 5 ,6}
>>> b = {5 ,6, 7, 8}
>>> c = {9, 10}
>>> a.update(b, c)
>>> a
{1, 2, 3, 4, 5 ,6, 7, 8, 9, 10}
>>> a |= b | c
>>> a
{1, 2, 3, 4, 5 ,6, 7, 8, 9, 10}
Các hàm dựng sẵn trong Python với set
| Hàm | Miêu tả |
|---|---|
| all() | Trả về True nếu tất cả các phần tử của set là True, hoặc nếu set rỗng. |
| any() | Trả về True nếu bất kì phần tử của set là True, hoặc nếu set rỗng trả về False |
| enumerate() | Trả lại một đối tượng liệt kê. Nó chứa chỉ mục và giá trị của tất cả các mục được đặt thành một cặp. |
| len() | Trả về độ lớn của set |
| max() | Trả về phần tử lớn nhất của set |
| min() | Trả về phần tử nhỏ nhất của set |
| sorted() | Trả về một set được sắp xếp |
| sum() | Trả về tổng của các phần tử trong set |
Tại sao lại là set
Set trong python được triển khai như một kiểu chứa dữ liệu nhưng có thể sử dụng các phương thức tính toán như trong toán học, thuận tiện cho việc lọc dữ liệu. Ví dụ như:- Lọc các phần tử trùng lặp trong
list
>>> a = [1, 2, 3, 4, 2, 3, 6]
>>> list(set(a))
[1, 2, 3, 4, 6]
- Hay các phép loại bỏ khác
>>> set([1, 3, 5, 7]) - set([1, 2, 4, 5, 6])
# Tìm các phần tử khác nhau trong 2 list
{3, 7}
>>> set('abcdefg') - set('abdghij')
# Tìm các phần tử khác nhau trong 2 tring
{'c', 'e', 'f'}
>>> set('spam') - set(['h', 'a', 'm'])
{'p', 's'}
>>> set(dir(bytes)) - set(dir(bytearray))
{'__getnewargs__'}
>>> set(dir(bytearray)) - set(dir(bytes))
{'append', 'copy', '__alloc__', '__imul__',
'remove', 'pop', 'insert',....}
Tag:
Python cơ bản
Set trong Python
Reviewed by Finn
on
December 17, 2018
Rating:
Reviewed by Finn
on
December 17, 2018
Rating:


No comments: