CHƯƠNG II. DỮ LIỆU TẬP HỢP TRONG PYTHON VÀ ỨNG DỤNG
CỦA CHƯƠNG TRÌNH SCILAB
1. Cách khai báo kiểu tập hợp 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:
Các phần tử của tập hợp được đặt trong cặp ngoặc nhọn {} các phần tử phân cách bởi
dấu phẩy ,.
Mỗi phần tử chỉ xuất hiện một lần cho dù bạn có nhập nó nhiều lần.
12
Kiểu tập hợp set cũng có các phép lấy hợp, lấy giao như trong Toán học.
Để tạo một tập hợp s rỗng, bạn cần dùng hàm không có thông số s = set(). Vì sử
dụng s = {} sẽ tạo một từ điển dictionary rỗng.
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 " ", line 1, in
TypeError: unhashable type: 'list'
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 Python
Bạ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
apple
2. Các toán tử và phương thức trên kiểu tập hợp
Giả sử S, S1 và S2 là các tập hợp, x là một phần tử:
13
2.1. Toán tử in
Sử 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
False
2.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)
0
2.3. Các phương thức add, remove, discard, pop, clear
Phương thức .add(x) sẽ thêm phần tử x vào tập .
Phương thức .update()sẽ thêm các phần tử
của vào . Có thể thay bởi các dữ liệu kiểu liệt kê
như tập hợp set, bộ tuple…
Phương thức .remove(x), .discard(x) sẽ xóa phần tử x khỏi
tập .
Phương thức .pop() trả về phần tử đứng đầu tiên trong tập đồng
thởi xóa phần tử đó khỏi tập .
>>> thisset = {2, 'banana', 'cherry', 'apple', 1, 3}
>>> thisset
{1, 2, 3, 'banana', 'cherry', 'apple'}
14
>>> thisset.pop()
1
>>> thisset.pop()
2
>>> thisset.pop()
3
>>> thisset.pop()
'banana'
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.
Phương thức .clear() xóa tất cả các phần tử của tập .
>>> S = {1, 2, 3, 4, 5, 6}
>>> S.add(100) #Thêm phần tử 100 vào tập S
>>> S
{1, 2, 3, 4, 5, 6, 100}
>>> S.remove(1) #Xóa phần tử 1 khỏi tập S
>>> S
{2, 3, 4, 5, 6, 100}
>>> S.pop() #Lấy ra phần tử đầu tiên của tập hợp
2
>>> S
{3, 4, 5, 6, 100}
>>> S.discard(6)
>>> S
{3, 4, 5, 100}
15
>>> S.clear() #Xóa hết mọi phần tử của S, lúc này S trở thành rỗng
>>> S
set()
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:
remove(x) sẽ trả về kết quả None.
discard(x) sẽ trả về lỗi KeyError.
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 " ", line 1, in
KeyError: 'e'
Chia sẻ với bạn bè của bạn: |