Python 3

Giới thiệu về list

Đăng bởi - Ngày 9-04-2018

Giới thiệu về list

List trong Python như là array trong Perl. Biến chứa mảng trong Perl luôn bắt đầu với @ còn trong Python thì ta có thể bắt đầu với kỳ tên gì.

>>> li = ["a", "b", "họ tên", "lớp"] #1
>>> li
['a', 'b', 'họ tên', 'lớp']
>>> li[0] #2
'a'
>>> li[2] #3
'họ tên'
  1. Đây là cách khai báo 1 list, list được đặt trong dấu ngoặc vuông []
  2. Index (vị trí) các phần tử trong Python bắt đầu từ 0
  3. Bạn lấy được value "họ tên" tại index 2 vì thứ tự trong list bắt đầu từ 0

Index số âm trong list

>>> li
['a', 'b', 'họ tên', 'lớp']
>>> li[-1] #1
'lớp'
>>> li[-2] #2
'họ tên'
>>> li[-3]
'b'
  1. Index số âm sẽ bắt đầu từ phần tử cuối cùng của list đếm ngược về, phần tử cuối cùng của bất kỳ list không rỗng luôn bắt đầu từ -1
  2. Bạn có thể hiểu cách tính index số âm theo công thức sau cho dễ hiểu: li[-n]  == li[len(li) - n]. Theo ví dụ trên thì ta tính như sau: li[-2] == li[4 - 2] == li[2]

Slice trong list

>>> li
['a', 'b', 'họ tên', 'lớp']
>>> li[1:3] #1
['b', 'họ tên']
>>> li[0:-1] #2
['a', 'b', 'họ tên']
>>> li[0:3] #3
['a', 'b', 'họ tên']
>>> li[:-2] #4
['a', 'b']
>>> li[1:] #5
['b', 'họ tên', 'lớp']
>>> li[:] #6
['a', 'b', 'họ tên', 'lớp']
  1. Bạn có thể lấy các giá trị trong 1 khoảng index được xác định trước, được gọi là "slice". Kết quả lấy được chứa tất cả phần tử trong list, bắt đầu từ index đầu (trong ví dụ này là li[1]) nhưng không lấy giá trị index cuối (trong ví dụ này là li[3])
  2. Slice có thể hoạt động ngay cả khi một trong hai index là số âm. Nếu bạn thấy khó hiểu thì phần này có thể hiểu như sau: cách đọc vẫn từ trái sang phải, giá trị thứ nhất vẫn lấy từ index thứ nhất (trong ví dụ là li[0]), và không lấy giá trị index thứ 2, giá trị lấy về nằm giữa 2 index này (trong ví dụ này là li[-1] == li[4 - 1] == li[3])
  3. Index của list được bắt đầu từ 0, vì vậy li[0:3] sẽ trả về kết quả giá trị của 3 index đầu tiên, bắt đầu từ li[0] nhưng không có giá trị của li[3]
  4. Trong ví dụ thứ 4 thì li[:-2] có nghĩa là li[0:-2], kết quả trả về sẽ nằm giữa 2 index 0 và 2 (li[-2] == li[4-2] == li[2])
  5. Nếu bạn cần lấy tất cả giá trị sau index thứ nhất (trong ví dụ là li[1]) bạn có thể để trống index thứ 2. Vậy li[1:] nghĩa là li[1:4] vì list này có 4 phần tử
  6. Nếu cả 2 index đều để trống thì tất cả giá trị trong list sẽ được trả về

Một điều cần lưu ý ở đây là trong 4 phần tử trên nếu ta dùng li[:2] thì kết quả trả về chỉ 2 index đầu tiên (li[0] và li[1]), và li[2:] sẽ trả về tất cả phần tử phía sau li[2] tính cả giá trị của li[2]

Thêm phần tử mới vào list

>>> li
['a', 'b', 'họ tên', 'lớp']
>>> li.append("xe máy") #1
>>> li
['a', 'b', 'họ tên', 'lớp', 'xe máy']
>>> li.insert(2, "new") #2
>>> li
['a', 'b', 'new', 'họ tên', 'lớp', 'xe máy']
>>> li.extend(["y", "z"]) #3
>>> li
['a', 'b', 'new', 'họ tên', 'lớp', 'xe máy', 'y', 'z']
  1. append thêm 1 phần tử vào list
  2. insert thêm 1 phần tử vào list. Tham số đầu tiên kiểu số, chỉ định phần tử sẽ thêm vào tại index nào, trong ví dụ là thêm "new" vào tại index thứ 2.
  3. extend dùng để cộng phần tử của 2 list lại với nhau. Extend chỉ có 1 tham số là list, trong ví dụ trên là list có 2 phần tử.

Điểm khác nhau giữa append và extend

>>> li = ['a', 'b', 'c']
>>> li.append(['d', 'e', 'f']) #1
>>> li
['a', 'b', 'c', ['d', 'e', 'f']]
>>> len(li) #2
4
>>> li[-1] #3
['d', 'e', 'f']
>>> li = ['a', 'b', 'c']
>>> li.extend(['d', 'e', 'f']) #4
>>> li
['a', 'b', 'c', 'd', 'e', 'f']
>>> len(li) #5
6
>>> li[-1]
'f'
  1. Cả 2 method append và extend của list trông có vẻ giống nhau nhưng kết quả sau khi dùng thì khác nhau. Với extend bạn sẽ cộng 2 phần tử của list lại nhưng append thì thêm list mới vào vị trí index cuối trong list cũ như 1 phần tử
  2. lenlà function của Python dùng để trả về số lượng phần tử trong list. Bắt đầu từ 1. Như bạn thấy len(li) của append chỉ trả về 4 phần tử
  3. li[-1] trả về phần tử là list của append. List có thể chưa bất kỳ loại dữ liệu nào, bao gồm cả list
  4. Khi bạn dùng extendthì sẽ cộng list mới vào list hiện tại
  5. Bây giờ khi bạn print len của list thì sẽ có tổng cộng 6 phần tử chứ không phải 4 như append

Tùy vào yêu cầu mà bạn cần bạn có thể sử dụng linh hoạt extend hoặc append

Tìm kiếm trong list

>>> li
['hoten', 'congty', 'tuoi', 'a', 'b', 2, 'hoten']
>>> li.index("congty") #1
1
>>> li.index("hoten") #2
0
>>> li.index("abc") #3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'abc' is not in list
>>> "tuoi" in li #4
True
>>> "xyz" in li
False
  1. indexdùng đề tìm index trong list thông qua giá trị
  2. Nếu giá trị cần tìm xuất hiện nhiều lần trong list thì index đầu tiên được tìm sẽ là kết quả
  3. Nếu giá trị đưa vào không có trong list thì một except ValueError được tạo ra
  4. Bạn có thể tìm kiếm xem giá trị mình cần tìm có trong list không bằng cách dùng in. Nếu giá trị trả về là True thì là có trong list và ngược lại

Xóa các phần tử trong list

>>> li
['hoten', 'congty', 'tuoi', 'a', 'b', 2, 'hoten']
>>> li.remove("tuoi") #1
>>> li
['hoten', 'congty', 'a', 'b', 2, 'hoten']
>>> li.remove("hoten") #2
>>> li
['congty', 'a', 'b', 2, 'hoten']
>>> li.remvove("xyz") #3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'remvove'
>>> li.pop() #4
'hoten'
>>> li
['congty', 'a', 'b', 2]
  1. remove dùng để xóa 1 phần tử thông qua giá trị được tìm thấy trong list
  2. removechỉ xóa 1 phần tử đầu tiên được tìm trong list từ trái sang phải
  3. Nếu remove không tìm thấy phần tử cần xóa sẽ thông báo lỗi exception AttributeError
  4. pop thực hiện 2 điều là xóa phần tử cuối cùng trong list và trả về kết quả vừa xóa.

Phép toán trong list

Một điểm thú vị trong list là bạn có thể dùng phép toán cộng và nhân trong list

>>> li = ['a', 'hoten', 'b']
>>> li = li + ['congty', 'nhanvien'] #1
>>> li
['a', 'hoten', 'b', 'congty', 'nhanvien']
>>> li += ['abc'] #2
>>> li
['a', 'hoten', 'b', 'congty', 'nhanvien', 'abc']
>>> li = [1, 2] * 3 #3
>>> li
[1, 2, 1, 2, 1, 2]
  1. Bạn có thể cộng 2 list với nhau. List + list sẽ có kết quả như bạn dùng extend.Nhưng dùng phép toán + sẽ trả về một list mới như giá trị, trong khi extend thêm trực tiếp vào list hiện đang có. Vì vậy extend sẽ thực hiện nhanh hơn, đặc biệt nếu dữ liệu cũng bạn lớn
  2. Bạn có thể viết tắt +=. li += ['abc'] sẽ tương đương với li = li + ['abc']. += có thể dùng cho cả list, string, integer.
  3. Phép nhân trong list được hiểu như là lặp lại. li = [1, 2] * 3 có nghĩa lập lại [1, 2] ba lần, tương đương với li = [1, 2] + [1, 2] + [1, 2].

Bài tập:

Bài 1: https://repl.it/community/classrooms/58454/assignments/857104

Các thẻ
Bài viết liên quan
0 nhận xét

    Không có nhận xét nào

Nhận xét mới

bắt buộc

yu.kusanagi
Từ Anh Vũ
Hồ Chí Minh, Việt Nam

Xin chào, tôi tên Từ Anh Vũ và là 1 free lancer developer và ngôn ngữ code yêu thích của tôi là Python và PHP. Công việc chủ yếu là viết các module cho magento, magento2, wordpress, django, flask và các framework khác
Nếu bạn muốn trao đổi với tôi hoặc muốn thuê tôi làm việc cho dự án của bạn, hãy liên hệ với tôi

ĐĂNG KÝ NHẬN BÀI MỚI

Tweets gần đây
Tác giả
Feeds
RSS / Atom
-->

Đăng ký nhận bài viết mới tại hocpython.com?

Hãy đăng ký nhận bài viết mới tại hocpython.com để:

  • Không bỏ lỡ các bài tutorials mới tại hocpython.com!
  • Cập nhật các công nghệ mới trong python!

Chỉ cần điền email và họ tên của bạn và nhấn Đăng ký nhận tin!