Trong phần này, chúng ta sẽ tìm hiểu về list slicing (cắt danh sách) và list comprehension (tạo danh sách) trong Python.
List Slicing là gì?
Như tên gọi gợi ý, slice có nghĩa là cắt thứ gì đó thành các mảnh nhỏ hơn (slices). List slicing là quá trình trích xuất một phần của danh sách từ danh sách gốc. Khi cắt danh sách, chúng ta sẽ cắt dựa trên những gì chúng ta muốn (như vị trí bắt đầu, dừng và bước nhảy).
List Comprehension là gì?
List comprehension là tạo ra một danh sách mới dựa trên một danh sách hiện có. Nó cung cấp một cách thanh lịch để định nghĩa và tạo ra các danh sách mới dựa trên các danh sách đã có.
List Slicing (Cắt danh sách)
Vì chúng ta sẽ cắt danh sách, hãy trước tiên tạo một danh sách:
>>> mylist = ["Which ", "Language ", "To ", "Choose ", "Difficult, ", "Python ", " ", "Java ", "Kotlin ", "Many more"]
Danh sách có thể được truy xuất ngược, bắt đầu từ -1 (phần tử cuối cùng) và tăng dần theo -1. Vì vậy -1 là phần tử cuối cùng, -2 là phần tử倒数第二.
>>> mylist_slice1 = mylist[0: -1:2]
>>> mylist_slice1
['Which ', 'To ', 'Difficult, ', 'Java ']
Khi cắt danh sách, chúng ta phải gọi tên danh sách trước (mylist trong trường hợp này) theo sau là các yêu cầu cắt. Các tham số này phải nằm trong cặp ngoặc vuông []. Các đối số chúng ta có thể cần truyền vào [] là:
- Tham số đầu tiên: chỉ số bắt đầu cắt.
- Tham số thứ hai: chỉ số dừng cắt.
- Tham số thứ ba: bước/giá trị tăng để cắt (tùy chọn).
Vậy cuối cùng sẽ trông như sau:
mylist[START: STOP:STEP]
>>> mylist_slice2 = mylist[1:-1:2]
>>> mylist_slice2
['Language ', 'Choose ', 'Python ', 'Kotlin ']
List Comprehension (Tạo danh sách)
Như bạn đã biết (từ trên), list comprehension là tạo danh sách mới từ danh sách hiện có. Hãy tạo một danh sách gốc trước, tôi sử dụng hàm range() để tạo danh sách tạm thời các số cho list comprehension.
>>> mylist1 = [x for x in range(0, 40)]
>>> mylist1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
>>>
>>> mylist2 = [x for x in range(0,41) if x%2 == 0]
>>> mylist2
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40]
Hãy hiểu những gì đang diễn ra ở trên: chúng ta trước tiên tạo một biến tạm thời tên "x" theo sau là một vòng lặp for duyệt qua range từ 0 đến 40 bên trong ngoặc vuông và khi thực thi, nó tạo ra danh sách các số từ 0 đến 39. Sau đó chúng ta tạo một danh sách khác và thêm điều kiện vào đó, điều kiện là "if x%2 == 0". Nghĩa là chúng ta chỉ tìm các số chẵn.
Hãy tạo một danh sách khác sử dụng chuỗi cho list comprehension.
>>> strlist = ["This", "Is", "A" , "List" , "Of", "Strings", "For", "List", "Comprehension"]
>>> print([x.lower() for x in strlist])
['this', 'is', 'a', 'list', 'of', 'strings', 'for', 'list', 'comprehension']
Ở trên chúng ta có một danh sách chuỗi, và chúng ta đã chuyển các mục trong danh sách thành chữ thường bằng list comprehension.