Hướng dẫn python type sequence - trình tự loại python

Trong bài viết trước, tôi đã giới thiệu về built-in function và đưa ra một số ví dụ về việc dùng built-in function sẽ đẩy nhanh tốc độ thực thi của chương trình. Bài viết tiếp theo này, tôi sẽ giới thiệu tiếp một số built-in functions thường được các lập trình viên Python "ưu ái" sử dụng khi xử lý các logic liên quan đến các đối tượng của kiểu dữ liệu lặp (sequence type object) như list/set/dict/string/tuple.
Bài viết tiếp theo này, tôi sẽ giới thiệu tiếp một số built-in functions thường được các lập trình viên Python "ưu ái" sử dụng khi xử lý các logic liên quan đến các đối tượng của kiểu dữ liệu lặp (sequence type object) như list/set/dict/string/tuple.

Đặc điểm của các đối tượng của kiểu dữ liệu lặp là cho phép lập trình viên lấy ra từng phần tử trong nó, hành động lấy ra các đối tượng có thể lặp đi lặp lại một cách tuần tự bằng vòng lặp for, while, next, ....

Ở bài viết trước, tôi đã đưa ra các ví dụ về tốc độ xử lý của 2 built-in function sum và len, bài viết tiếp theo này, tôi sẽ bỏ qua việc chứng minh tốc độ thực thi của built-in function mà tập trung vào chức năng và cách sử dụng của built-in function.

1. sorted

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))
9

Đầu vào:- iterable: Một sequence-type-object - key: Tham số tùy chọn, cho phép sắp xếp sequence-type-object theo một tiêu chí nào đó.- reverse: Tham số tùy chọn, mặc định là False; Nếu False thì sắp xếp theo tăng dần, True sắp xếp theo giảm dầnĐầu ra: Một sequence-type-object đã được sắp xếp theo thứ tự (tăng dần hoặc giảm dần) và theo tiêu chí key.:
- iterable: Một sequence-type-object
- key: Tham số tùy chọn, cho phép sắp xếp sequence-type-object theo một tiêu chí nào đó.
- reverse: Tham số tùy chọn, mặc định là False; Nếu False thì sắp xếp theo tăng dần, True sắp xếp theo giảm dần
Đầu ra: Một sequence-type-object đã được sắp xếp theo thứ tự (tăng dần hoặc giảm dần) và theo tiêu chí key.

Function đầu tiên mà tôi muốn giới thiệu với các bạn là function

before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
0, đây là một built-in function sẽ giúp các lập trình viên tiết kiệm được nhiều số dòng code và giải quyết được một số bài toán đặc biệt.

Ví dụ:

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
ascending_numbers = sorted(numbers)
descending_numbers = sorted(numbers, reverse=True)

print("numbers:", numbers)
print("ascending_numbers: ", ascending_numbers)
print("descending_numbers: ", descending_numbers)

Kết quả: 

before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
1
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
2
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
3
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
2
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
3

Lưu ý:Trong các function được cung cấp bởi list object cũng có một function là

before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4.Điều khác biệt giữa
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4 và
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
6 là
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4 tác động trực tiếp vào list, thay đổi vị trí các phần tử trong list mà không thay đổi id của list. Còn
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
6 là trả về một list mới, có id khác với list đầu vào.

Trong các function được cung cấp bởi list object cũng có một function là
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4.
Điều khác biệt giữa
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4 và
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
6 là
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4 tác động trực tiếp vào list, thay đổi vị trí các phần tử trong list mà không thay đổi id của list.
Còn
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
6 là trả về một list mới, có id khác với list đầu vào.

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))

Kết quả:

before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432

Dùng

before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4 hay
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
6 tùy vào nhu cầu của lập trình viên.

Cách sử dụng

fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
1 trong sorted khá uyển chuyển, khi lập trình viên đưa ra một điều kiện gắn vào với key, mỗi lần duyệt qua một phần tử trong sequence-type-object, sẽ phát sinh một lần tính toán theo điều kiện và dùng kết quả của phép tính toán đó để thực hiện sắp xếp trong sequence-type-object.

Định nghĩa về cách sử dụng

fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
1 này hơi khó hiểu, chúng ta đến một ví dụ sau để dễ hiểu hơn.

Đề bài: Cho một danh sách tên một số loại hoa quả, hãy sắp xếp danh sách theo thứ tự tăng dần của độ dài (số lượng ký tự) các loại hoa quả.
Cho một danh sách tên một số loại hoa quả, hãy sắp xếp danh sách theo thứ tự tăng dần của độ dài (số lượng ký tự) các loại hoa quả.

fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)

fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
3
fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
4
fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
4

Bài toán trên nếu để làm theo cách lập trình thông thường (kể cả dùng python để giải quyết) cũng sẽ tốn khá khá "giấy bút" và các biến dữ liệu phụ. Nhưng dùng built-in function chỉ tốn đúng 01 dòng.
Nhưng dùng built-in function chỉ tốn đúng 01 dòng.

Tiếp tục đi vào ví dụ thứ 2 để nhấn mạnh thêm tiện ích của key nhé.

Đề bài: Cho một list các tuple chứa 3 số. Hãy sắp xếp các tuple trong list theo thứ tự tăng dần của phần tử thứ 2 trong tuple.
Cho một list các tuple chứa 3 số. Hãy sắp xếp các tuple trong list theo thứ tự tăng dần của phần tử thứ 2 trong tuple.

tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)

fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
5
fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
6
fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
6

Ngoài cách viết trên, còn cách viết ngắn gọn hơn dùng đến biểu thức

fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
7

sorted_lambda = sorted(tuples, key=lambda x: x[1])

2. Enumerate

Đây là một function được đưa ra để giúp các lập trình viên thực hiện lấy ra cặp giá trị index-value từ các đối tượng sequence-type-object (list, set, dict, string,...)

Sử dụng enumerate sẽ thay thế được cú pháp lấy ra index-value từ đối tượng sequence-type-object thường gặp với C-style.

# basic looping
code_learn = "https://codelearn.io/"

for index in range(len(code_learn)):   
    print("index:", index, "value:", code_learn[index])

# use enumerate function
for index, value in enumerate(code_learn):
    print("index:", index, "value:", value)
  

Câu hỏi đặt ra là đối tượng trả về của function enumerate là gì ? và từng đối tượng được sử dụng trong vòng lặp for phía trên là kiểu dữ liệu gì?

numbers = ["1", "2", "3", "4"]
enumerate_object = enumerate(numbers)
print("type enumerate object: ", enumerate_object)

for item in enumerate_object:
    print(item, type(item))

Kết quả: 

fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
8
fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
9
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
0
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
1
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
2
fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
9
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
0
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
1
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
2

Lưu ý:Trong các function được cung cấp bởi list object cũng có một function là

before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4.Điều khác biệt giữa
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4 và
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
6 là
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4 tác động trực tiếp vào list, thay đổi vị trí các phần tử trong list mà không thay đổi id của list. Còn
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
6 là trả về một list mới, có id khác với list đầu vào.

Kết quả:

numbers = ["1", "2", "3", "4"]
enumerate_object = enumerate(numbers)
list_tuple = list(enumerate(numbers))
print(list_tuple)

Dùng

before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
4 hay
before sort()
numbers: [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
id of numbers: 2209690579392
---------------------
after sort()
numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of numbers: 2209690579392
---------------------
sorted_numbers: [21, 28, 32, 55, 60, 63, 68, 80, 83, 89]
id of sorted_numbers: 2209692170432
6 tùy vào nhu cầu của lập trình viên.
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
3

Cách sử dụng

fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
1 trong sorted khá uyển chuyển, khi lập trình viên đưa ra một điều kiện gắn vào với key, mỗi lần duyệt qua một phần tử trong sequence-type-object, sẽ phát sinh một lần tính toán theo điều kiện và dùng kết quả của phép tính toán đó để thực hiện sắp xếp trong sequence-type-object.

numbers = ["1", "2", "3", "4"]
for index, value in enumerate(numbers, start=2):
    print("index:", index, "value:", value)

Định nghĩa về cách sử dụng

fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
1 này hơi khó hiểu, chúng ta đến một ví dụ sau để dễ hiểu hơn.
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
6
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
7
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
8
tuples =  [(43, 91, 26), (52, 7, 98), (47, 28, 44), (10, 20, 26), (77, 7, 53)]

def get_key(tuple_item):
    return tuple_item[1]

sorted_tuples = sorted(tuples, key=get_key)

print("before sort", tuples)
print("after sort", sorted_tuples)
9

Đề bài: Cho một danh sách tên một số loại hoa quả, hãy sắp xếp danh sách theo thứ tự tăng dần của độ dài (số lượng ký tự) các loại hoa quả.

Bài toán trên nếu để làm theo cách lập trình thông thường (kể cả dùng python để giải quyết) cũng sẽ tốn khá khá "giấy bút" và các biến dữ liệu phụ. Nhưng dùng built-in function chỉ tốn đúng 01 dòng.

Tiếp tục đi vào ví dụ thứ 2 để nhấn mạnh thêm tiện ích của key nhé. Một sequence-type-object
Đầu ra: Trả về True nếu tất cả các phần tử trong sequence-type-object đều có giá trị True. Nếu không, trả về False

Đề bài: Cho một list các tuple chứa 3 số. Hãy sắp xếp các tuple trong list theo thứ tự tăng dần của phần tử thứ 2 trong tuple.
- None
- False (kiểu dữ liệu Boolean)
- Số 0
- Đối tượng list, set, tuple, dict rỗng

Ngoài cách viết trên, còn cách viết ngắn gọn hơn dùng đến biểu thức

fruits = ['banana', 'apple', 'orange', 'lemon', 'pear', 'grape', 'blackberries', 'coconut', 'papaya']
sorted_fruits = sorted(fruits, key=len)

print("before sort", fruits)
print("after sort", sorted_fruits)
7

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))
0

Kết quả trả về:

sorted_lambda = sorted(tuples, key=lambda x: x[1])
1
sorted_lambda = sorted(tuples, key=lambda x: x[1])
2
sorted_lambda = sorted(tuples, key=lambda x: x[1])
1
sorted_lambda = sorted(tuples, key=lambda x: x[1])
2


Các ví dụ về dùng all()

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))
1

Kết quả:

sorted_lambda = sorted(tuples, key=lambda x: x[1])
3
sorted_lambda = sorted(tuples, key=lambda x: x[1])
0
sorted_lambda = sorted(tuples, key=lambda x: x[1])
3
sorted_lambda = sorted(tuples, key=lambda x: x[1])
0
sorted_lambda = sorted(tuples, key=lambda x: x[1])
3
sorted_lambda = sorted(tuples, key=lambda x: x[1])
0
sorted_lambda = sorted(tuples, key=lambda x: x[1])
3
sorted_lambda = sorted(tuples, key=lambda x: x[1])
0

Với dictionary, function

sorted_lambda = sorted(tuples, key=lambda x: x[1])
7 sẽ thực hiện lấy các giá trị của key trong dictionary để tính toán kết quả trả về.

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))
2

Kết quả:

sorted_lambda = sorted(tuples, key=lambda x: x[1])
3
sorted_lambda = sorted(tuples, key=lambda x: x[1])
3

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))
3

Kết quả:

sorted_lambda = sorted(tuples, key=lambda x: x[1])
0
sorted_lambda = sorted(tuples, key=lambda x: x[1])
0

3.2. any

Đầu vào: Một sequence-type-objectĐầu ra: Trả về True nếu chỉ cần một phần tử trong sequence-type-object có giá trị True. Nếu không, trả về False: Một sequence-type-object
Đầu ra: Trả về True nếu chỉ cần một phần tử trong sequence-type-object có giá trị True. Nếu không, trả về False

Hàm any hơi khác một chút so với hàm all. Hàm all() chỉ cần có 1 giá trị là False sẽ trả về False, hàm any thì chỉ cần một phần tử giá trị True là trả về True

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))
4

Tương tự với all khi ứng xử với dictionary, any cũng nhận đầu vào key của các dictionary

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))
5

4. Reversed

reversed(sequence): Đảo ngược các phần tử trong một sequence-type-object

Đầu vào: sequence-type-objectĐầu ra: sequence-type-object có type là list_reversesequence-type-object.: sequence-type-object
Đầu ra: sequence-type-object có type là list_reversesequence-type-object.

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))
6

Kết quả: 

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))
7


Sử dụng built-in function reversed sẽ giúp chúng ta lấy ra nhanh một đối tượng đảo ngược của đối tượng gốc thay vì sử dụng vòng lặp để append dần các đối tượng từ cuối lên đầu hoặc sử dụng slice [::-1].

5. max & min

# basic looping
code_learn = "https://codelearn.io/"

for index in range(len(code_learn)):   
    print("index:", index, "value:", code_learn[index])

# use enumerate function
for index, value in enumerate(code_learn):
    print("index:", index, "value:", value)
  
0(sequence-type-object): Trả về số lớn nhất trong các số thuộc sequence-type-object
# basic looping
code_learn = "https://codelearn.io/"

for index in range(len(code_learn)):   
    print("index:", index, "value:", code_learn[index])

# use enumerate function
for index, value in enumerate(code_learn):
    print("index:", index, "value:", value)
  
1(sequence-type-object): Trả về số nhỏ nhất trong các số thuộc sequence-type-object
# basic looping
code_learn = "https://codelearn.io/"

for index in range(len(code_learn)):   
    print("index:", index, "value:", code_learn[index])

# use enumerate function
for index, value in enumerate(code_learn):
    print("index:", index, "value:", value)
  
1(sequence-type-object): Trả về số nhỏ nhất trong các số thuộc sequence-type-object

Riêng với 2 function này chắc không cần nói nhiều về chúng, bài toán tìm số lớn nhất & nhỏ nhất tốn rất nhiều "giấy bút" của các lập trình viên và Python đã cung cấp luôn 2 built-in function để giải quyết bài toán này.

Trên thực tế, với một số tập dữ liệu đặc biệt có thể built-in function cho kết quả chưa chắc đã tối ưu hơn các cách giải quyết bài toán bằng tư duy toán học & thuật toán nhưng bằng việc chỉ dùng 1 dòng lệnh để tính ra kết quả thì cũng xứng đáng để chúng ta sử dụng 2 function này

numbers = [63, 83, 32, 80, 55, 68, 28, 21, 60, 89]
print("before sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

sorted_numbers = sorted(numbers)
numbers.sort()

print("---------------------")
print("after sort()")
print("numbers:", numbers)
print("id of numbers:", id(numbers))

print("---------------------")
print("sorted_numbers:", sorted_numbers)
print("id of sorted_numbers:", id(sorted_numbers))
8

Kết quả: 

# basic looping
code_learn = "https://codelearn.io/"

for index in range(len(code_learn)):   
    print("index:", index, "value:", code_learn[index])

# use enumerate function
for index, value in enumerate(code_learn):
    print("index:", index, "value:", value)
  
2
# basic looping
code_learn = "https://codelearn.io/"

for index in range(len(code_learn)):   
    print("index:", index, "value:", code_learn[index])

# use enumerate function
for index, value in enumerate(code_learn):
    print("index:", index, "value:", value)
  
3
# basic looping
code_learn = "https://codelearn.io/"

for index in range(len(code_learn)):   
    print("index:", index, "value:", code_learn[index])

# use enumerate function
for index, value in enumerate(code_learn):
    print("index:", index, "value:", value)
  
3

Sử dụng built-in function reversed sẽ giúp chúng ta lấy ra nhanh một đối tượng đảo ngược của đối tượng gốc thay vì sử dụng vòng lặp để append dần các đối tượng từ cuối lên đầu hoặc sử dụng slice [::-1].

5. max & min
Cảm ơn các bạn đã đọc bài viết.