Khi vào làm một dự án thực tế bạn sẽ phải xử lý rất nhiều vấn đề liên quan đến danh sách (danh sách thông tin của người dùng, danh sách các địa điểm, danh sách các ngôi nhà,…) vì vậy việc nắm được kiểu dữ liệu này trong Python là rất quan trọng. Hôm nay chúng ta sẽ đi tìm hiểu một số điều sau:
List
là gì?- Làm thế nào để truy cập vào phần tử của một
list
? - Thực hiện các thao tác cơ bản như thêm, xóa, sửa các phần tử của một
list
như thế nào? - List comprehension trong Python.
List là gì?
Trong Python, list là một tập hợp có thứ tự chứa một số lượng hữu hạn các phần tử, các phần tử này có thể có cùng kiểu dữ liệu hoặc không.
Ta dùng ngoặc vuông (square brackets) []
để biểu diễn một list trống (empty list): listA = []
.
Đối với list có nhiều hơn 1 phần tử, các phần tử được phân biệt bởi dấu phẩy ,
(comma), chẳng hạn:
listB = [1, 2.3, 'a']
print(listB)
Output
[1, 2.3, 'a']
Các phần tử của một list có thể có kiểu dữ liệu bất kỳ, thậm chí là một list:
listC = [1, ['a', 'b', 'c'], 'abc']
print(listC)
Một list có một hoặc nhiều phần tử bên trong lại là một list được gọi là một danh sách lồng nhau (nested list), chẳng hạn như listC
phía trên và các list bên trong được gọi là các list con (sublist).
Truy cập phần tử của list
Mỗi phần tử trong một list luôn được đánh số (indexed) nên dựa vào một chỉ số (index) cụ thể ta có thể truy cập phần tử của một list:
numbers = [1, 2, 3, 4, 5]
print(numbers[0])
print(numbers[1])
Output
1
2
Cần chú ý rằng ta có thể truy cập phần tử với index
âm. Khi index
là một số âm thì thứ tự lấy phần tử sẽ bị đảo ngược, tính từ phần tử cuối cùng:
numbers = [1, 2, 3, 4, 5]
print(numbers[-1])
print(numbers[-2])
Output
5
4
Gọi k
là một số tự nhiên đại diện cho chiều dài (số phần tử) của một list, khi đó chỉ số lớn nhất mà chúng ta có thể truy cập là k - 1
. Nếu truy cập vượt chỉ số này Python sẽ báo lỗi.
numbers = [1,2,3,4,5]
print(numbers[5])
Output
IndexError: list index out of range
Chỉ số nhỏ nhất mà chúng ta có thể truy cập là -k
. Nếu truy cập chỉ nhỏ số hơn Python sẽ báo lỗi.
numbers = [1,2,3,4,5]
print(numbers[-6])
Output
IndexError: list index out of range
Việc truy cập phần tử của một nested list cũng được thực hiện tương tự:
listC = [1, ['a', 'b', 'c'], 'abc']
print(listC[1])
print(listC[1][0])
print(listC[1][-1])
Output
['a', 'b', 'c']
a
c
Thay đổi một list
Thêm
append
Python cung cấp phương thức (method) append
để ta thêm một phần tử mới vào cuối list:
numbers = [1,2,3,4,5]
numbers.append(6)
print(numbers)
Output
[1, 2, 3, 4, 5, 6]
insert
Sử dụng phương thức insert(index_of_the_value, the_value)
để thêm một giá trị mới vào một ví trí cụ thể trong list:
numbers = [1,2,3,4,5]
numbers.insert(1,6)
print(numbers)
Output
[1, 6, 2, 3, 4, 5]
extend
Muốn thêm tất cả các phần tử của một list vào cuối một list khác ta sử dụng phương thức extend:
listA = [1,2]
listB = ['a', 'b', 'c']
listA.extend(listB)
print(listA)
listB.extend(listA)
print(listB)
Output
[1, 2, 'a', 'b', 'c']
['a', 'b', 'c', 1, 2, 'a', 'b', 'c']
Toán tử +
Ta cũng có thể dùng toán tử +
để nối hai list lại với nhau mà không làm thay đổi các list ban đầu:
listA = [1,2]
listB = ['a', 'b', 'c']
listC = listA + listB
print(listA)
print(listC)
Output
[1, 2]
[1, 2, 'a', 'b', 'c']
Xóa
remove
Phương thức remove(value)
sẽ xóa đi phần tử đầu tiên mà nó tìm thấy trong list:
fruits = ['orange', 'mango', 'banana', 'mango', 'watermelon']
fruits.remove('mango')
print(fruits)
Output
['orange', 'banana', 'mango', 'watermelon']
Trường hợp không tìm thấy phần tử nào để xóa theo yêu cầu Python sẽ trả ra lỗi:
fruits = ['orange', 'mango', 'banana', 'mango', 'watermelon']
fruits.remove('durian')
print(fruits)
Output
ValueError: list.remove(x): x not in list
pop
Nếu muốn xóa phần tử ở một vị trí cụ thể ta có thể dùng phương thức pop(index_of_element)
. Ngoài ra, pop
sẽ trả ra phần tử mà nó đã xóa:
fruits = ['orange', 'mango', 'banana', 'mango', 'watermelon']
removedElemnt = fruits.pop(2)
print(removedElemnt)
print(fruits)
Output
banana
['orange', 'mango', 'mango', 'watermelon']
Trường hợp ta không truyền chỉ số cụ thể thì pop
sẽ lấy giá trị mặc định là chỉ số của phần tử cuối cùng:
fruits = ['orange', 'mango', 'banana', 'mango', 'watermelon']
removedElemnt = fruits.pop()
print(removedElemnt)
print(fruits)
Output
watermelon
['orange', 'mango', 'banana', 'mango']
del
Để xóa nhiều phần tử liên tiếp trong một list ta có thể dùng từ khóa del
theo cú pháp sau:
del yourlist[i, j + 1]
Trong đó i
là index của phần tử đầu tiên bạn muốn xoá và j
là index của phần tử cuối cùng mà bạn muốn xoá. Mặc định: j = 1
.
fruits = ['orange', 'mango', 'banana', 'mango', 'watermelon']
del fruits[1]
print(fruits)
del fruits[1:3]
print(fruits)
Output
['orange', 'banana', 'mango', 'watermelon']
['orange', 'watermelon']
Sửa
Thay thế trực tiếp qua index
Mỗi phần tử trong list đều có một vị trí cụ thể, căn cứ vào vị trí này ta có thể thay đổi giá trị của phần tử ban đầu bằng cách gán một giá trị mới vào chính vị trí đó:
fruits = ['orange', 'mango', 'banana', 'mango', 'watermelon']
fruits[1] = 'durian'
print(fruits)
Output
['orange', 'durian', 'banana', 'mango', 'watermelon']
Thay thế nhiều phần tử liên tiếp
Để thay thế nhiều phần tử liên tiếp trong một list ta có thể dùng cú pháp sau:
yourlist[i, j + 1] = [value_1, value_2, ...]
Trong đó i
và j lần lượt là index của phần tử đầu tiên và index của phần tử cuối cùng mà bạn muốn thay thế.
fruits = ['orange', 'mango', 'banana', 'mango', 'watermelon']
fruits[1:4] = ['durian', 'apple', 'pineapple']
print(fruits)
Output
['orange', 'durian', 'apple', 'pineapple', 'watermelon']
List comprehension
Trước khi kết thúc, chúng ta hãy tìm hiểu một chút về List comprehension trong Python.
Thông thường, để tạo một list mới từ một list cho trước, ta sẽ dùng vòng lặp như sau:
numbers = [1,2,3,4,5]
newNumbers = []
for x in numbers:
if(x > 2):
newNumbers.append(x + 1)
print(newNumbers)
Output
[4, 5, 6]
Với List comprehension, Python cho phép ta thực hiện tác vụ trên ngắn gọn hơn rất nhiều, cú pháp để sử dụng:
newlist = [expression for item in iterable if condition == True]
Trong đó expression
là cách biểu thị phần tử mà bạn muốn thêm vào newList
và condition
là điều kiện phần tử phải thỏa mãn để được đưa vào newList
:
numbers = [1,2,3,4,5]
newNumbers = [x + 1 for x in numbers if x > 2]
print(newNumbers)
Output
[4, 5, 6]
Vậy qua bài hôm này chúng ta đã nắm được:
- Khái niệm về list trong Python.
- Cách để truy cập các phần tử của một list thông thường và một nested list.
- Các phương thức, từ khóa quan trọng để thao tác với list.
- Cú pháp List comprehension để tạo một list mới từ một list cho trước.
Chúc các bạn học tốt!
Python cơ bản
Phần 1: Kiến thức tổng quan
Cú pháp (syntax)
Biến (variables)
Chuỗi ký tự (strings)
Số (numbers) trong Python
Boolean trong Python
Vòng lặp trong Python
Danh sách (list) trong Python
Bộ dữ liệu (tuple) trong Python
Đường tuy ngắn không đi không đến; Việc tuy nhỏ không làm không nên.