LIST là một container được sử dụng rất nhiều trong các chương trình Python. Một List gồm các yếu tố sau:
· Được giới hạn bởi cặp ngoặc [ ], tất cả những gì nằm trong đó là những phần tử của List.
· Các phần tử của List được phân cách nhau ra bởi dấu phẩy (,).
· List có khả năng chứa mọi giá trị, đối tượng trong Python. Và bao gồm chứa chính nó! (một trường hợp hay ho Kteam sẽ giới thiệu ở phần khác).
Ví dụ:
>>> [1, 2, 3, 4, 5] # Một List chứa 5 số nguyên
[1, 2, 3, 4, 5]
>>> ['a', 'b', 'c', 'd'] # Một List chứa 4 chuỗi
['a', 'b', 'c', 'd']
>>> [[1, 2], [3, 4]] # Một List chứa 2 List là [1, 2] và [3, 4]
[[1, 2], [3, 4]]
>>> [1, 'one', [2, 'two']] # List chứa số nguyên, chuỗi, và List
[1, 'one', [2, 'two']]
Cách khởi tạo List
Sử dụng cặp dấu ngoặc [] đặt giá trị bên trong
Cú pháp:
[
Ví dụ:
>>> lst = [1,2,5,"kteam"]
>>> lst
[1, 2, 5, 'kteam']
>>> empty_list = [] # khởi tạo list rỗng
>>> empty_list
[ ]
Sử dụng List Comprehension
Cú pháp
[Comprehension]
Ví dụ:
>>> a = [kteam for kteam in range(3)]
>>> a
[0, 1, 2]
>>> another_lst = [[n, n * 1, n * 2] for n in range(1, 4)]
>>> another_lst
[[1, 1, 2], [2, 2, 4], [3, 3, 6]]
List comprehension là một cách khởi tạo một List rất thú vị trong Python. Do đó, rất khó để có thể nói hết các trường hợp. Vì vậy, hãy tạm gác lại kiến thức này, bạn không cần phải cố gắng hiểu nó khi chúng ta chưa gặp gỡ các vòng lặp.
Sử dụng constructor List
Cú pháp:
list (iterable)
Ví dụ:Lưu ý: iterable là một đối tượng nói chung của các container. Khái niệm này sẽ được giới thiệu ở bài sau.
>>> lst = list([1, 2, 3])
>>> lst
[1, 2, 3]
>>> str_lst = list('HOWKTEAM')
>>> str_lst
['H', 'O', 'W', 'K', 'T', 'E', 'A', 'M']
>>> list(1)
Traceback (most recent call last):
File "
TypeError: 'int' object is not iterable
Một số toán tử với List trong Python
Các toán tử của List gần giống và tương tự với chuỗi (bạn có thể tham khảo toán tử của chuỗi ở bài KIỂU DỮ LIỆU CHUỖI – phần 2).
Toán tử +
>>> lst = [1, 2]
>>> lst += ['one', 'two']
>>> lst
[1, 2, 'one', 'two']
>>> lst += 'abc' # cộng List và chuỗi
>>> lst
[1, 2, 'one', 'two', 'a', 'b', 'c']
>>> 'abc' + [1, 2] # List cộng chuỗi cho phép, chuỗi cộng List thì không.
Traceback (most recent call last):
File "
TypeError: must be str, not list
Toán tử *
>>> lst = list('KTER') * 2
>>> lst
['K', 'T', 'E', 'R', 'K', 'T', 'E', 'R']
>>> [1, 2] * 3
[1, 2, 1, 2, 1, 2]
>>> 'a' in [1, 2, 3]
False
>>> 'a' in ['a', 2, 3]
True
>>> 'a' in [['a'], 'b', 'c'] # chỉ có ['a'] thôi, không có 'a'
False
Indexing và cắt List trong Python
Như đã đề cập, List với chuỗi giống nhau rất nhiều điểm, và phần Indexing và cắt List này hoàn toàn giống với Indexing và cắt chuỗi.
>>> lst = [1, 2, 'a', 'b', [3, 4]]
>>> lst[0]
1
>>> lst[-1]
[3, 4]
>>> lst[3]
'b'
>>> lst[1:3]
[2, 'a']
>>> lst[:2]
[1, 2]
>>> lst[2:]
['a', 'b', [3, 4]]
>>> lst[::-1]
[[3, 4], 'b', 'a', 2, 1]
Thay đổi nội dung List trong Python
Như bạn đã biết, ta không thể thay đổi nội dung của chuỗi như ví dụ bên dưới
>>> s = 'math'
>>> s[1]
'a'
>>> s[1] = 'i'
Traceback (most recent call last):
File "", line 1, in
TypeError: 'str' object does not support item assignment
Còn về phần List, ta có thể thay đổi nội dung của nó
>>> lst = [1, 'two', 3]
>>> lst[1]
'two'
>>> lst[1] = 2
>>> lst
[1, 2, 3]
Ma trận
Nghe ma trận hoàn tráng thế thôi, bạn đã thấy nó rồi. Ví dụ một List chứa một List khác đấy.
>>> lst = [[1, 2, 3], [4, 5, 6]]
>>> lst
[[1, 2, 3], [4, 5, 6]]
Ta dễ dàng truy cập hai phần tử của List vừa mới khởi tạo
>>> lst[0]
[1, 2, 3]
>>> lst[-1]
[4, 5, 6]
Hai giá trị đó cũng là một List. Và lẽ dĩ nhiên, bạn có quyền truy cập đến các phần tử con của phần tử nằm trong List bạn vừa khởi tạo. Thậm chí là cắt List!
>>> lst[0][0]
1
>>> lst[0][-1]
3
>>> lst[1][1]
5
>>> lst[0][:2]
[1, 2]
>>> lst[1][:]
[4, 5, 6]
Vấn đề cần lưu tâm khi sử dụng List
Những lưu ý này nếu bạn không biết, chương trình của bạn có thể có output khác với bạn mong muốn.
Không được phép gán List này qua List kia nếu không có chủ đích
Hãy xem xét đoạn code sau đây
>>> lst = [1, 2, 3]
>>> another_lst = lst
>>> lst
[1, 2, 3]
>>> lst = [1, 2, 3]
>>> lst
[1, 2, 3]
>>> another_lst = lst
>>> another_lst
[1, 2, 3]
>>> lst
[1, 2, 3]
Mọi thứ ổn, không có gì xảy ra, cho tới khi bạn thay đổi giá trị bất kì của một trong hai List đó.
>>> another_lst[1]
2
>>> another_lst[1] = 'Two'
>>> another_lst
[1, 'Two', 3]
>>> lst
[1, 'Two', 3]
Do đó, trước khi gán, bạn phải copy giá trị của List
>>> lst = [1, 2, 3]
>>> lst
[1, 2, 3]
>>> another_list = list(lst) # cách 1
>>> another_list
[1, 2, 3]
>>> last_list = lst[:] # cách 2
>>> last_list
[1, 2, 3]
>>> another_list[1] = 'Two'
>>> last_list[1] = 'Chu'
>>> lst
[1, 2, 3]
>>> another_list
[1, 'Two', 3]
>>> last_list
[1, 'Chu', 3]
Thêm một trường hợp nữa bạn cần phải lưu ý, đó là lúc bạn cần copy giá trị của một ma trận
>>> lst = [[1, 2, 3], [4, 5, 6]]
>>> lst
[[1, 2, 3], [4, 5, 6]]
>>> another_lst = lst[:]
>>> another_lst[0] = 'ok'
>>> lst
[[1, 2, 3], [4, 5, 6]]
>>> another_lst
['ok', [4, 5, 6]]
Đúng như chúng ta mong đợi. Thế nhưng…
>>> another_lst[1]
[4, 5, 6]
>>> another_lst[1][0] = 'changed'
>>> another_lst
['ok', ['changed', 5, 6]]
>>> lst
[[1, 2, 3], ['changed', 5, 6]]
Lưu ý: nó chỉ sao chép các phần tử của List. Không hề sao chép các phần tử con của các phần tử nằm trong List. Do đó, nếu bạn thay đổi các phần tử trong List thì không sao, tuy nhiên nếu thay đổi phần tử con của các phần tử trong List, thì vấn đề lại xuất hiện.
(còn tiếp)
» Tin mới nhất:
» Các tin khác: