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 (,
).
Set
không có thứ tự vì vậy các phương thứcindexing
vàslice
sẽ không được hỗ trợ trongset
.
- Các phần tử của
set
là duy nhất, không được phép trùng lặp.
Set
có thể sửa đổi (mutable
) nhưng các phần tử trongset
phải thuộc loại không thể thay đổi (immutable
), vì vậyset
không thể chứa 1set
khá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ử
in
Trả vềTrue
nếuvalue
tồ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 in
Ngược với toán tửin
. Trả vềTrue
nếuvalue
khô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:
No comments: