Chương 6 Tuples
6.5. Sử dụng tuple ở đâu
Sử dụng tuple thay vì list được sử dụng trong kịch bản sau đây.
1. Sử dụng tuple thay vì list cho chúng ta một ý tưởng rõ ràng rằng dữ liệu tuple là hằng số và không được thay đổi.
2. Tuple có thể mơ phỏng từ điển mà khơng cần khóa. Hãy xem xét cấu trúc lồng nhau sau đây có thể được sử dụng như một từ điển.
[(101, "John", 22), (102, "Mike", 28), (103, "Dustin", 30)]
3. Tuple có thể được sử dụng làm chìa khóa trong từ điển do tính chất bất biến của nó.
6.6. List và Tuple
SN List Tuple
1 Sử dụng [] để chứa các phần tử.
Sử dụng () để chứa các phần tử.
2 Có thể thay đổi phần tử Không thể thay đổi phần tử 3 Độ dài thay đổi. Độ dài không thay đổi. 4 List này cung cấp nhiều chức
năng hơn tuple.
Tuple cung cấp ít chức năng hơn list.
5 List được sử dụng trong kịch bản mà chúng ta cần lưu trữ các bộ sưu tập đơn giản mà khơng có ràng buộc nào trong đó giá trị của các mục có thể được thay đổi.
Tuple được sử dụng trong trường hợp chúng ta cần lưu trữ các bộ sưu tập chỉ đọc, tức là, giá trị của các mục khơng thể thay đổi. Nó có thể được sử dụng làm chìa khóa trong từ điển.
6.7. Lồng List và Tuple
Chúng ta có thể lưu trữ listt bên trong tuple hoặc tuple bên trong list cho đến bất kỳ số cấp nào.
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
50
Bài giảng: Ngôn ngữ Python
1. Employees = [(101, "Ayush", 22), (102, "john", 29), (103, "james", 45), (104, "Ben ", 34)] 2. print("----Printing list----"); 3. for i in Employees: 4. print(i) 5. Employees[0] = (110, "David",22) 6. print();
7. print("----Printing list after modification----");
8. for i in Employees: 9. print(i) Output: ----Printing list---- (101, 'Ayush', 22) (102, 'john', 29) (103, 'james', 45) (104, 'Ben', 34)
----Printing list after modification---- (110, 'David', 22) (102, 'john', 29) (103, 'james', 45) (104, 'Ben', 34) 6.8. Một số ví dụ tubple 6.8.1. Lấy một phần tử trong tuple >>> #create a tuple
>>> tuplex = ("w", 3, "r", "e", "s", "o", "u", "r", "c", "e") >>> print(tuplex)
('w', 3, 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e') >>> #get item (4th element)of the tuple by index >>> item = tuplex[3]
>>> print(item)
e
>>> #get item (4th element from last)by index negative >>> item1 = tuplex[-4]
>>> print(item1)
u
>>>
6.8.2. Kiểm tra phần tử có tồn tại trong tuple
>>> #create a tuple
>>> tuplex = ("w", 3, "r", "e", "s", "o", "u", "r", "c", "e") >>> print(tuplex)
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
51
Bài giảng: Ngơn ngữ Python
('w', 3, 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e') >>> #use in statement >>> print("r" in tuplex) True >>> print(5 in tuplex) False >>>
6.8.3. Chuyển List tới Tuple
>>> #create list
>>> listx = [5, 10, 7, 4, 15, 3] >>> print(listx)
[5, 10, 7, 4, 15, 3]
>>> #use the tuple() function built-in Python, passing as parameter the list
>>> tuplex = tuple(listx) >>> print(tuplex) (5, 10, 7, 4, 15, 3) >>> 6.8.4. Giải nén một tuple trong một số biến >>> #create a tuple >>> tuplex = 4, 8, 3 >>> print(tuplex) (4, 8, 3) >>> n1, n2, n3 = tuplex
>>> #unpack a tuple in variables >>> print(n1 + n2 + n3)
15
>>> #the number of variables must be equal to the number of items of the tuple
>>> n1, n2, n3, n4 = tuplex
Traceback (most recent call last): File "<stdin>", line 1, in <module>
ValueError: need more than 3 values to unpack
>>>
6.8.5. Thêm phần tử vào Tuple
>>> #create a tuple
>>> tuplex = (4, 6, 2, 8, 3, 1) >>> print(tuplex)
(4, 6, 2, 8, 3, 1)
>>> #tuples are immutable, so you can not add new elements >>> #using merge of tuples with the + operator you can add an element and it will create a new tuple
>>> tuplex = tuplex + (9,) >>> print(tuplex)
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
52
Bài giảng: Ngôn ngữ Python
(4, 6, 2, 8, 3, 1, 9)
>>> #adding items in a specific index
>>> tuplex = tuplex[:5] + (15, 20, 25) + tuplex[:5] >>> print(tuplex)
(4, 6, 2, 8, 3, 15, 20, 25, 4, 6, 2, 8, 3) >>> #converting the tuple to list
>>> listx = list(tuplex)
>>> #use different ways to add items in list >>> listx.append(30) >>> tuplex = tuple(listx) >>> print(tuplex) (4, 6, 2, 8, 3, 15, 20, 25, 4, 6, 2, 8, 3, 30) >>> 6.8.6. Clone một Tuple
>>> from copy import deepcopy >>> #create a tuple
>>> tuplex = ("HELLO", 5, [], True) >>> print(tuplex)
('HELLO', 5, [], True)
>>> #make a copy of a tuple using deepcopy() function >>> tuplex_clone = deepcopy(tuplex) >>> tuplex_clone[2].append(50) >>> print(tuplex_clone) ('HELLO', 5, [50], True) >>> print(tuplex) ('HELLO', 5, [], True) >>> 6.8.9. Kiểm tra số lần lặp lại của phần tử >>> #create a tuple >>> tuplex = 2, 4, 5, 6, 2, 3, 4, 4, 7 >>> print(tuplex) (2, 4, 5, 6, 2, 3, 4, 4, 7)
>>> #return the number of times it appears in the tuple. >>> count = tuplex.count(4) >>> print(count) 3 >>> count = tuplex.count(7) >>> print(count) 1 >>> count = tuplex.count(5) >>> print (count) 1 >>>
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
53
Bài giảng: Ngôn ngữ Python
>>> #create a tuple
>>> tuplex = "w", 3, "d", "r", "e", "s", "l" >>> print(tuplex)
('w', 3, 'd', 'r', 'e', 's', 'l')
>>> #tuples are immutable, so you can not remove elements
>>> #using merge of tuples with the + operator you can remove an item and it will create a new tuple
>>> tuplex = tuplex[:2] + tuplex[3:] >>> print(tuplex)
('w', 3, 'r', 'e', 's', 'l') >>> #converting the tuple to list >>> listx = list(tuplex)
>>> #use different ways to remove an item of the list >>> listx.remove("l")
>>> #converting the tuple to list >>> tuplex = tuple(listx) >>> print(tuplex) ('w', 3, 'r', 'e', 's') >>> 6.8.11. Slice một Tuple >>> #create a tuple >>> tuplex = (2, 4, 3, 5, 4, 6, 7, 8, 6, 1)
>>> #used tuple[start:stop] the start index is inclusive and the stop index
>>> _slice = tuplex[3:5] #is exclusive.
>>> print(_slice) (5, 4)
>>> #if the start index isn't defined, is taken from the beg inning of the tuple.
>>> _slice = tuplex[:6] >>> print(_slice)
(2, 4, 3, 5, 4, 6)
>>> #if the end index isn't defined, is taken until the end of the tuple
>>> _slice = tuplex[5:] >>> print(_slice)
(6, 7, 8, 6, 1)
>>> #if neither is defined, returns the full tuple >>> _slice = tuplex[:]
>>> print(_slice)
(2, 4, 3, 5, 4, 6, 7, 8, 6, 1)
>>> #The indexes can be defined with negative values >>> _slice = tuplex[-8:-4]
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
54
Bài giảng: Ngơn ngữ Python
(3, 5, 4, 6) >>>
6.8.12. Tìm chỉ mục của một phần tử
>>> #create a tuple
>>> tuplex = tuple("index tuple") >>> print(tuplex)
('i', 'n', 'd', 'e', 'x', ' ', 't', 'u', 'p', 'l', 'e') >>> #get index of the first item whose value is passed as parameter
>>> index = tuplex.index("p") >>> print(index)
8
>>> #define the index from which you want to search >>> index = tuplex.index("p", 5)
>>> print(index) 8
>>> #define the segment of the tuple to be searched >>> index = tuplex.index("e", 3, 6)
>>> print(index) 3
>>> #if item not exists in the tuple return ValueError Exception >>> index = tuplex.index("y")
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: tuple.index(x): x not in tuple
>>>
6.8.13. Kích thước của một tuple
>>> tuplex = tuple("w3resource") #create a tuple >>> print(tuplex)
('w', '3', 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e')
>>> #use the len() function to known the length of tuple. >>> print(len(tuplex))
10 >>>
6.8.14. Các toán tử + và * trong tuple
>>> #create a tuple
>>> tuplex = 5, #create a tuple
>>> #The * operator allow repeat the items in the tuple >>> print(tuplex * 6)
(5, 5, 5, 5, 5, 5)
>>> #create a tuple with repeated items. >>> tuplex = (5, 10, 15) * 4
>>> print(tuplex)
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
55
Bài giảng: Ngôn ngữ Python
>>> #create three tuples
>>> tuplex1 = (3, 6, 9, 12, 15)
>>> tuplex2 = ("w", 3, "r", "s", "o", "u", "r", "c", "e") >>> tuplex3 = (True, False)
>>> #The + operator allow create a tuple joining two or more tuples
>>> tuplex = tuplex1 + tuplex2 + tuplex3 >>> print(tuplex)
(3, 6, 9, 12, 15, 'w', 3, 'r', 's', 'o', 'u', 'r', 'c', 'e', True, False)
>>>
6.8.15. Slice một Tuple sử dụng tahm số step
>>> #create a tuple
>>> tuplex = tuple("HELLO WORLD") >>> print(tuplex)
('H', 'E', 'L', 'L', 'O', ' ', 'W', 'O', 'R', 'L', 'D')
>>> #step specify an increment between the elements to cut of the tuple.
>>> _slice = tuplex[2:9:2] #tuple[start:stop:step] >>> print(_slice)
('L', 'O', 'W', 'R')
>>> #returns a tuple with a jump every 3 items. >>> _slice = tuplex[::4]
>>> print(_slice) ('H', 'O', 'R')
>>> #when step is negative the jump is made back >>> _slice = tuplex[9:2:-4]
>>> print(_slice) ('L', ' ')
>>> #when step is negative the jump is made back >>> _slice = tuplex[9:2:-3] >>> print(_slice) ('L', 'W', 'L') >>> 6.8.16. Sửa phần tử trong Tuple >>> #create a tuple >>> tuplex = ("w", 3, "r", [], False) >>> print(tuplex) ('w', 3, 'r', [], False)
>>> # Tuple là bất biến, vì vậy bạn khơng thể sửa đổi các mục cũng là bất biến, như str, boolean, số, v.v.
>>> tuplex[3].append(200) >>> print(tuplex)
('w', 3, 'r', [200], False) >>>
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
56
Bài giảng: Ngơn ngữ Python
6.9. Bài tập
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
57
Bài giảng: Ngôn ngữ Python
Chương 7. Set 7.1. Khái niệm set trong Python
Một set là một bộ sưu tập khơng có thứ tự và khơng có chỉ mục. Trong Python, set được viết với dấu ngoặc nhọn.
Một số câu lệnh phổ biến:
<set> = set() <set>.add(<el>)
# Or: <set> |= {<el>}
<set>.update(<collection>) # Or: <set> |= <set>
<set> = <set>.union(<coll.>) # Or: <set> | <set>
<set> = <set>.intersection(<coll.>) # Or: <set> & <set>
<set> = <set>.difference(<coll.>) # Or: <set> - <set>
<set> = <set>.symmetric_difference(<coll.>) # Or: <set> ^ <set>
<bool> = <set>.issubset(<coll.>) # Or: <set> <= <set>
<bool> = <set>.issuperset(<coll.>) # Or: <set> >= <set>
<el> = <set>.pop()
# Raises KeyError if empty. <set>.remove(<el>)
# Raises KeyError if missing. <set>.discard(<el>)
# Doesn't raise an error.
7.2. Tạo set trong Python
Tạo set sử dụng dấu {}
1. Days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Su nday"}
2. print(Days)
3. print(type(Days))
4. print("looping through the set elements ... ")
5. for i in Days:
6. print(i) Output:
{'Friday', 'Tuesday', 'Monday', 'Saturday', 'Thursday', 'Sunday', 'Wednesday'}
<class 'set'>
looping through the set elements ... Friday
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
58
Bài giảng: Ngơn ngữ Python
Monday Saturday Thursday Sunday Wednesday
Tạo set sử dụng phương thức set()
1. Days = set(["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"])
2. print(Days)
3. print(type(Days))
4. print("looping through the set elements ... ")
5. for i in Days:
6. print(i) Output:
{'Friday', 'Wednesday', 'Thursday', 'Saturday', 'Monday', 'Tuesday', 'Sunday'}
<class 'set'>
looping through the set elements ... Friday Wednesday Thursday Saturday Monday Tuesday Sunday
7.3. Thao tác trên set trong Python
7.3.1. Thêm phần tử
Python cung cấp phương thức add () có thể được sử dụng để thêm một số phần tử cụ thể vào set. Hãy xem xét ví dụ sau.
1. Months = set(["January","February", "March", "April", "May", "June"]) 2. print("\nprinting the original set ... ")
3. print(Months)
4. print("\nAdding other months to the set...");
5. Months.add("July"); 6. Months.add("August");
7. print("\nPrinting the modified set...");
8. print(Months)
9. print("\nlooping through the set elements ... ")
10. for i in Months:
11. print(i) Output:
printing the original set ...
{'February', 'May', 'April', 'March', 'June', 'January'} Adding other months to the set...
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
59
Bài giảng: Ngơn ngữ Python
{'February', 'July', 'May', 'April', 'March', 'August', 'June', 'January'}
looping through the set elements ... February July May April March August June January
Để thêm nhiều mục trong tập hợp, Python cung cấp phương thức update (). Hãy xem xét ví dụ sau.
1. Months = set(["January","February", "March", "April", "May", "June"]) 2. print("\nprinting the original set ... ")
3. print(Months)
4. print("\nupdating the original set ... ")
5. Months.update(["July","August","September","October"]); 6. print("\nprinting the modified set ... ")
7. print(Months);
Output:
printing the original set ...
{'January', 'February', 'April', 'May', 'June', 'March'} updating the original set ...
printing the modified set ...
{'January', 'February', 'April', 'August', 'October', 'May', 'June', 'July', 'September', 'March'}
7.3.2. Xóa phần tử trong set
Python cung cấp phương thức disard () có thể được sử dụng để xóa các mục khỏi tập hợp. Hãy xem xét ví dụ sau.
1. Months = set(["January","February", "March", "April", "May", "June"]) 2. print("\nprinting the original set ... ")
3. print(Months)
4. print("\nRemoving some months from the set...");
5. Months.discard("January"); 6. Months.discard("May");
7. print("\nPrinting the modified set...");
8. print(Months)
9. print("\nlooping through the set elements ... ")
10. for i in Months:
11. print(i) Output:
Ths. Nguyễn Văn Duy Trường đại học Công nghiệp Tp. Hồ Chí Minh
60
Bài giảng: Ngơn ngữ Python
printing the original set ...
{'February', 'January', 'March', 'April', 'June', 'May'} Removing some months from the set...
Printing the modified set...
{'February', 'March', 'April', 'June'} looping through the set elements ... February
March April June
Python cũng cung cấp phương thức remove () để xóa các phần tử khỏi set. Xem xét ví dụ sau để loại bỏ các phần tử bằng phương thức remove ().
1. Months = set(["January","February", "March", "April", "May", "June"]) 2. print("\nprinting the original set ... ")
3. print(Months)
4. print("\nRemoving some months from the set...");
5. Months.remove("January"); 6. Months.remove("May");
7. print("\nPrinting the modified set...");
8. print(Months)
Output:
printing the original set ...
{'February', 'June', 'April', 'May', 'January', 'March'} Removing some months from the set...
Printing the modified set...
{'February', 'June', 'April', 'March'}
Chúng ta cũng có thể sử dụng phương thứcpop () để xóa phần tử này. Tuy nhiên, phương pháp này sẽ luôn loại bỏ phần tử cuối cùng. Xem xét ví dụ sau để xóa phần tử cuối cùng khỏi set.
1. Months = set(["January","February", "March", "April", "May", "June"]) 2. print("\nprinting the original set ... ")
3. print(Months)
4. print("\nRemoving some months from the set...");
5. Months.pop(); 6. Months.pop();
7. print("\nPrinting the modified set...");
8. print(Months)
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
61
Bài giảng: Ngôn ngữ Python
printing the original set ...
{'June', 'January', 'May', 'April', 'February', 'March'} Removing some months from the set...
Printing the modified set...
{'May', 'April', 'February', 'March'}
Python cung cấp phương thức clear () để xóa tất cả các phần tử khỏi set. Hãy xem xét ví dụ sau.
1. Months = set(["January","February", "March", "April", "May", "June"]) 2. print("\nprinting the original set ... ")
3. print(Months)
4. print("\nRemoving all the items from the set...");
5. Months.clear()
6. print("\nPrinting the modified set...")
7. print(Months)
Output:
printing the original set ...
{'January', 'May', 'June', 'April', 'March', 'February'} Removing all the items from the set...
Printing the modified set... set()
7.4. Sự khác biệt giữa discard() và remove()
Mặc dù thực tế là cả hai phương thức discard() và remove() cùng làm một nhiệm vụ. Tuy nhiên, chúng có sự khác biệt.
Nếu khóa bị xóa khỏi set mà khơng tồn tại trong tập hợp sử dụng disard (), python sẽ khơng đưa ra lỗi. Chương trình duy trì dịng điều khiển của nó.
Mặt khác, nếu phần tử bị xóa khỏi tập hợp mà khơng tồn tại trong tập hợp sử dụng remove (), python sẽ đưa ra lỗi.
Ví dụ:
1. Months = set(["January","February", "March", "April", "May", "June"]) 2. print("\nprinting the original set ... ")
3. print(Months)
4. print("\nRemoving items through discard() method...");
5. Months.discard("Feb"); #will not give an error although the key feb is not available i n the set
6. print("\nprinting the modified set...")
7. print(Months)
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
62
Bài giảng: Ngôn ngữ Python
9. Months.remove("Jan") #will give an error as the key jan is not available in the set.
10. print("\nPrinting the modified set...")
11. print(Months)
Output:
printing the original set ...
{'March', 'January', 'April', 'June', 'February', 'May'} Removing items through discard() method...
printing the modified set...
{'March', 'January', 'April', 'June', 'February', 'May'} Removing items through remove() method...
Traceback (most recent call last): File "set.py", line 9, in
Months.remove("Jan") KeyError: 'Jan'
7.5. Hợp của hai set
Hợp của hai set được tính bằng cách sử dụngtoán tử hoặc (|). Sự kết hợp của hai bộ chứa tất cả các phần tử có trong cả hai set. Xem xét ví dụ sau để tính liên kết của hai set.
Ví dụ 1:
1. Days1 = {"Monday","Tuesday","Wednesday","Thursday"} 2. Days2 = {"Friday","Saturday","Sunday"}
3. print(Days1|Days2) #printing the union of the sets
Output:
{'Friday', 'Sunday', 'Saturday', 'Tuesday', 'Wednesday', 'Monday', 'Thursday'}
Python cũng cung cấp phương thức union ()có thể được sử dụng để tính tốn kết hợp của hai set. Hãy xem xét ví dụ sau.
1. Days1 = {"Monday","Tuesday","Wednesday","Thursday"} 2. Days2 = {"Friday","Saturday","Sunday"}
3. print(Days1.union(Days2)) #printing the union of the sets
Output:
{'Friday', 'Monday', 'Tuesday', 'Thursday', 'Wednesday', 'Sunday', 'Saturday'}
7.6. Giao của hai set
Toán tử & (giao điểm) được sử dụng để tính tốn giao điểm của hai set trong
python. Giao điểm của hai set được đưa ra dưới dạng tập hợp các phần tử phổ biến trong cả hai bộ. Hãy xem xét ví dụ sau.
Ví dụ 1: sử dụng tốn tử &
1. set1 = {"Ayush","John", "David", "Martin"} 2. set2 = {"Steve","Milan","David", "Martin"}
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
63
Bài giảng: Ngơn ngữ Python
Output:
{'Martin', 'David'}
Ví dụ 2: sử dụng phương thức intersection() 1. set1 = {"Ayush","John", "David", "Martin"} 2. set2 = {"Steave","Milan","David", "Martin"}
3. print(set1.intersection(set2)) #prints the intersection of the two sets
Output:
{'Martin', 'David'}
7.7. Phương thức intersection_update()
Phương thức interection_update () sẽ loại bỏ các phần tử khỏi set ban đầu. Các phần tử giữ lại khơng có trong các set được chỉ định.
Phương thức intersection_update () khác với phương thức intersection() vì nó sửa đổi tập gốc bằng cách loại bỏ các phần tử không mong muốn, mặt khác, phương thức intersection() trả về một tập mới.
Hãy xem xét ví dụ sau. 1. a = {"ayush", "bob", "castle"} 2. b = {"castle", "dude", "emyway"} 3. c = {"fuson", "gaurav", "castle"} 4. a.intersection_update(b, c) 5. print(a)
Output: {'castle'}
7.8. Sự khác biệt giữa hai set
Sự khác biệt của hai set có thể được tính bằng cách sử dụng tốn tử phép trừ (-). Tập kết quả sẽ thu được bằng cách loại bỏ tất cả các phần tử khỏi tập 1 có trong tập 2.
Hãy xem xét ví dụ sau.
Ví dụ 1 sử dụng tốn tử subtraction ( - )
1. Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"} 2. Days2 = {"Monday", "Tuesday", "Sunday"}
3. print(Days1-Days2) #{"Wednesday", "Thursday" will be printed}
Output:
{'Thursday', 'Wednesday'}
Ví dụ 2 sử dụng phương thức difference()
1. Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"} 2. Days2 = {"Monday", "Tuesday", "Sunday"}
3. print(Days1.difference(Days2)) # prints the difference of the two sets Days1 and D
ays2 Output:
Ths. Nguyễn Văn Duy Trường đại học Cơng nghiệp Tp. Hồ Chí Minh
64
Bài giảng: Ngơn ngữ Python
7.9. So sánh hai set
Python cho phép chúng ta sử dụng các tốn tử so sánh ( ví dụ: <,>, <=,> =, == ) với các set. Chúng ta có thể kiểm tra xem một set là tập hợp con, tập hợp con hay tương đương với tập hợp khác.