Chuyển đến nội dung chính

List Trong Python

Trong ngôn ngữ lập trình Python có 4 kiểu dữ liệu thu thập (collection data) bao gồm List, Tuple, Set và Dictionary. Khi bạn chọn một kiểu tập hợp, bạn cần phải hiểu rõ các thuộc tính của nó để tăng cường hiệu quả bảo mật hoặc sử dụng. Bài viết hôm nay sẽ giới thiệu và phân tích rõ các thuộc tính của List trong Python, một trong những kiểu dữ liệu thường xuyên sử dụng trong lập trình.

I. Các Kiểu Dữ Liệu Chuẩn

Dữ liệu mà được lưu trữ trong bộ nhớ có thể có nhiều kiểu khác nhau. Ví dụ, lương của công nhân đươc lưu trữ dưới dạng một giá trị số còn địa chỉ của họ được lưu trữ dưới dạng các ký tự chữ-số. Python có nhiều kiểu dữ liệu chuẩn được sử dụng để xác định các hành động có thể xảy ra trên chúng và phương thức lưu trữ cho mỗi kiểu.

Python có 5 kiểu dữ liệu chuẩn là:

  1. Kiểu Number
  2. Kiểu String
  3. Kiểu List
  4. Kiểu Tuple
  5. Kiểu Dictionary

Ngoài kiểu Number và kiểu String mà có thể bạn đã được làm quen với các ngôn ngữ lập trình khác thì ở trong Python còn xuất hiện thêm ba kiểu dữ liệu đó là List, Tuple và Dictionary.

Các Kiểu Dữ Liệu Chuẩn
Các Kiểu Dữ Liệu Chuẩn

II. List Trong Python Là Gì

Trong Python list là một dạng dữ liệu cho phép lưu trữ nhiều kiểu dữ liệu khác nhau và truy xuất các phần tử bên trong nó thông qua vị trí của phần tử đó trong list. List có thể được coi là một mảng tuần tự như trong các ngôn ngữ khác (như vector trong C++ và ArrayList trong Java).

Lists không nhất thiết phải đồng nhất, điều này khiến nó trở thành 1 công cụ mạnh mẽ nhất trong Python. Một list đơn có thể bao gồm các loại Datatypes như Integers, Strings cũng như Objects. Lists có thể đổi thay được ngay cả sau khi được tạo.

List trong Python được sắp xếp theo thứ tự và có số lượng xác định. Các phần tử trong list được lập chỉ mục theo một trình tự xác định và việc lập chỉ mục của danh sách được thực hiện với 0 là chỉ số đầu tiên. Mỗi yếu tố trong trong list đều có vị trí xác định trong list, điều này cho phép sao chép các phần tử trong danh sách, với mỗi phần tử có vị trí và độ tin cậy riêng biệt.

 List Trong Python Là Gì
List Trong Python Là Gì

III. Nhập List Trong Python

Hướng dẫn cách nhập list trong python. Bạn sẽ học được cách nhập list trong python( input list trong python) bằng phương pháp sử dụng hàm input() sau bài học này.

Nhập list trong python có giới hạn số phần tử

Để nhập list trong python, chúng ta cũng lặp lại hàm input() với số lần cụ thể bằng cách dùng vòng lặp for giống như ở phần trên.

Tuy nhiên lúc cần chỉ định và giới hạn số phần tử trong list, chúng ta buộc phải thêm một bước nhập số phần tử của list đó, trước khi tiến hành input list trong python.

Ví dụ, chúng ta nhập list trong python có giới hạn phần tử bằng hàm input() và vòng lặp for như sau:

num = int(input("Nhập số phần tử của list : "))
mylist = []
for i in range(num):
   val = input('Nhập giá trị: ')
   mylist.append(val)
print(mylist)

#>> Nhập số phần tử của list : 3
#>> Nhập giá trị: 1
#>> Nhập giá trị: 2
#>> Nhập giá trị: 3
#>> ['1', '2', '3']

Ngoài cách lặp lại hàm input() như trên, chúng ta cũng có thể sử dụng một lần nhập duy nhất bằng cách nhập tất cả các phần tử của list cách nhau bởi 1 ký tự phân cách, thí dụ như là dấu cách chẳng hạn, sau đó dùng phương pháp tách chuỗi và thu về kết quả dưới dạng list như sau:

mystr = input("Nhập các phần tử của list cách nhau bởi dấu cách: ")
mylist = mystr.split()
print(mylist)

Màn hình nhập dữ liệu sẽ như sau:

Nhập các phần tử của list cách nhau bởi dấu cách: 1 2 3 a b c de7
['1', '2', '3', 'a', 'b', 'c', 'de7']

Nhập list trong python không giới hạn số phần tử

Bằng cách sử dụng vòng lặp vô hạn while True có kèm điều kiện để dừng, chúng ta có thể nhập list trong python mà không giới hạn số phần tử cần nhập vào.

Ví dụ, chúng ta nhập một list trong python không giới hạn số phần tử và sẽ kết thúc quá trình nhập khi bạn nhập vào dòng chữ stop như sau:

mylist = []

print('Nhập "stop" khi muốn dừng')
while True:
    val = input('Nhập dữ liệu: ')
    if val == 'stop':
        print('Kết thúc')
        break
    mylist.append(val)
print(mylist)

Màn hình nhập dữ liệu sẽ như sau:

Nhập "stop" khi muốn dừng
Nhập dữ liệu: 1
Nhập dữ liệu: 2
Nhập dữ liệu: a
Nhập dữ liệu: b
Nhập dữ liệu: k8
Nhập dữ liệu: stop
Kết thúc
['1', '2', 'a', 'b', 'k8']
Nhập List Trong Python
Nhập List Trong Python

IV. Truy Cập Các Phần Tử Của List Trong Python

Truy cập các phần tử của tập hợp List trong Python

Các phần tử trong danh sách có thể được truy cập bằng cách sử dụng những chỉ số tương ứng của nó. List là 1 danh sách các phần tử được sắp xếp thứ tự với chỉ số của mỗi phần từ là duy nhất. Do đó, chúng ta có thể truy cập các phần tử thông qua chỉ số của nó.

Trong Python, các chỉ số sẽ được đánh từ trái qua phải bắt đầu từ giá trị là 0 cho tới độ dài của list -1. Vì vậy, một một đối tượng kiểu List có 5 phần tử sẽ có chỉ số từ 0 tới 4. Và giả dụ chúng ta muốn truy cập vào phần tử thứ 3 của danh sách thì chúng ta phải dùng chỉ số là 2 vì danh sách được đánh số từ 0.

Một số lưu ý:

  • Chỉ số của danh sách bắt đầu từ 0 cho tới độ dài chuỗi -1
  • Khi chúng ta truy cập một danh sách với chỉ số vượt quá phạm vi của độ dài của nó, chương trình sẽ báo lỗi ‘Index Error’.
  • Tương tự, những chỉ số là số nguyên, do đó, nếu chúng ta sử dụng các kiểu dữ liệu khác cho chỉ số thì chương trình sẽ báo lỗi Type Error.

Ví dụ 4:

vi_du = [100, 300, "Python", "Javascript"]
print(vi_du[0])
print(vi_du[3])
vi_du2 = ["Python", [100, 200, 300, 400]]
print(vi_du2[0])
print(vi_du2[1][2])

Kết quả:

100
Javascript
Python
300

Trong ví dụ trên, để truy cập được phần tử thứ 4 của danh sách, chúng ta cần phải truyền vào giá trị chỉ số là 3. Tương tự, chúng ta truyền vào chỉ số là 0 để truy cập phần tử đầu tiên trong danh sách.

Cách truy cập này tương tự như chúng ta đã sử dụng với các chuỗi ký tự trước đây. Các quy tắc trong truy cập chuỗi ký tự cũng có thể được áp dụng với kiểu danh sách List.

Ngoài ra, ở ví dụ trên, trong câu lệnh thứ 6, chúng ta đã tiến hành truy cập 1 phần tử trong danh sách con, bởi nó cũng là một danh sách và có chỉ số riêng. Vì vậy ở đây chúng ta có 2 dấu ngoặc vuông [].

Chúng ta cũng có thể sử dụng các chỉ số có giá trị âm để truy cập các phần tử của List. Python cho phép sử dụng chỉ số có giá trị âm cho các phần tử của nó. Chỉ số -1 tham chiếu đến phần tử cuối cùng, -2 tham chiếu đến phần tử cuối cùng thứ hai,…

Truy Cập Các Phần Tử Của List Trong Python
Truy Cập Các Phần Tử Của List Trong Python

Ví dụ 5:

vi_du2 = ["Python", [100, 200, 300, 400]]
print(vi_du2[-1])
print(vi_du2[-2])

Kết quả:

[100, 200, 300, 400]
Python

Nhắc lại, chúng ta không được phép truy cập chỉ số nằm ngoài danh sách. Nếu không chương trình sẽ báo lỗi!!!

Ví dụ 6:

vi_du = [100, 300, "Python", "Javascript"]
print(vi_du[5])

Kết quả:

Traceback (most recent call last):
  File "e:/Learning/IT/Python/Bai2.py", line 2, in <module>
    print(vi_du[5])
IndexError: list index out of range

V. Các Hoạt Động Cơ Bản Trên List Trong Python

1. Tính Độ Dài Của Một List Trong Python

Giả sử trong tay bạn có một list dài ngoằng chứa một đống thông tin về thẻ tín dụng của bạn, mà bạn không thể biết được mình có bao nhiêu khoản nợ trong đó. Chẳng lẽ lại ngồi đếm? Techacademy cá với bạn rằng lúc này, bạn sẽ cần dùng tới hàm len() của python để giải quyết việc đếm số khoản nợ có trong list này chỉ trong vòng một tích tắc. Thật là sugoi đúng không nào? Hãy cùng Techacademy tìm hiểu cách tính độ dài của List python với hàm len() thông qua bài học này.

Khi cần tính độ dài của một list, ngoài cách tự đếm (đùa đấy ^_ ) thì chúng ta có thể sử dụng một hàm tích hợp sẵn của python, đó là hàm len().

Chúng ta tính độ dài của một list (số phần tử có trong list đó) bằng hàm len với cú pháp sau đây:

Cú pháp tính độ dài List python bằng hàm len

len (list)

Hàm len cho ra kết quả là độ dài hoặc số phần tử của đối tượng đang xét. Nếu đối tượng này là list, hàm sẽ cho ra kết quả là số phần tử có trong list đó.

Chúng ta hãy xem một vài ví dụ sau đây:

len(["Red", "Green", "Blue"])
#>>  3

len([1, 2, 3, 4, 5])
#>>  5

len([10, 20, ["Sun", "Mon", "Fri"], 40])
#>>  4

Cách sử dụng hàm len khá đơn giản. Cuối cùng bạn hãy thực hành online để sử dụng nó thuần thục hơn.

print(len(["Red", "Green", "Blue"]))

print(len([1, 2, 3, 4, 5]))

print(len([10, 20, ["Sun", "Mon", "Fri"], 40]))
Tính Độ Dài Của Một List Trong Python
Tính Độ Dài Của Một List Trong Python

2. Chèn Phần Tử Tới List Trong Python

Hướng dẫn tất cả các cách chèn phần tử vào list python. Bạn sẽ học được các cách chèn phần tử vào list python như chèn một phần tử vào vị trí chỉ định trong list ban đầu, chèn nhiều phần tử vào vị trí chỉ định trong list ban đầu, cũng như cách chèn và thay thế nhiều phần tử vào phạm vi chỉ định trong list ban đầu, bằng cách sử dụng phương thức insert() và chức năng cắt (slice) list python sau bài học này.

Chúng ta có 3 phương pháp để chèn phần tử vào list python như sau:

  • Phương thức insert() : chèn một phần tử vào vị trí chỉ định trong list ban đầu.
  • Cắt (slice) list : Chèn nhiều phần tử vào vị trí chỉ định trong list ban đầu
  • Cắt (slice) list : Thay thế và chèn nhiều phần tử vào phạm vi chỉ định trong list ban đầu

Lại nữa trong trường hợp bạn chỉ muốn thêm chèn phần tử vào cuối một list python, hãy sử dụng các phương thức khác như append() hay extend() trong bài viết thêm phần tử vào list và kết hợp các list với nhau trong python nhé.

Chèn một phần tử vào vị trí chỉ định trong list ban đầu | phương thức insert()

Phương thức insert() trong python được dùng để chèn một phần tử vào vị trí chỉ định trong list python. Chúng ta sử dụng phương thức insert() với cú pháp sau đây:

org_list.insert (index, giá trị)

Trong đó:

  • org_list là list ban đầu
  • index là vị trí cần chèn phần tử trong list ban đầu
  • giá trị là giá trị của phần tử cần chèn vào list. Giá trị này có thể là một chuỗi hoặc một số.

Phương thức insert() sẽ chèn giá trị vào vị trí trước phần tử có index được chỉ định trong list ban đầu.

Ví dụ cụ thể, chúng ta chèn một chuỗi ký tự vào list python như sau

mylist = ["A", "B", "C"]
mylist.insert(1, "Z")

print(mylist)
#>> ["A", "Z", "B", "C"]

Bạn có thể thấy ký tự Z đã được chèn vào vị trí đứng trước ký tự B có index bằng 1.

Trong trường hợp chỉ định giá trị chèn vào là một chuỗi string, thì bản thân chuỗi string đó sẽ được coi như là một phần tử mới và được chèn vào list ban đầu như sau:

mylist = ["Blue", "Red", "Green"]

# Chèn chuỗi 'White' vào trước phần tử có index bằng 2
mylist.insert(2, "White")
print(mylist)
#>> ['Blue', 'Red', 'White', 'Green']

# Chèn chuỗi 'Black' vào đầu list
mylist.insert(0, "Black")
print(mylist)
#>> ['Black', 'Blue', 'Red', 'White', 'Green']

Nếu bạn muốn lấy từng ký tự trong chuỗi chỉ định và chèn vào list ban đầu, hãy xem ở phần dưới nhé.

Tương tự với chuỗi, bạn cũng có thể chèn một số vào list python bằng cách sử dụng phương thức insert() như sau:

mynum = [1, 2, 3, 4, 5]
mynum.insert(3, 6)

print(mynum)
#>> [1, 2, 3, 6, 4, 5]


mylist = ["A", "B", "C"]
mylist.insert(1, 3)

print(mylist)
#>> ['A', 3, 'B', 'C']

Lưu ý là với phương thức insert() chúng ta chỉ có thể chèn một phần tử vào list python mà thôi.

Chèn nhiều phần tử vào vị trí chỉ định trong list ban đầu | cắt (slice) list

Bằng cách ứng dụng chức năng cắt (slice) list, chúng ta có thể chèn nhiều phần tử vào vị trí chỉ định trong list ban đầu thông qua một list, một tuple hoặc một chuỗi.

Ý tưởng ở đây là chúng ta sẽ lưu giữ tất cả các phần tử cần chèn vào trong một tuple, chuỗi, hoặc list, sau đó sử dụng cắt (slice) list để cắt một phạm vi trống ở list ban đầu, rồi chèn vào đó các phần tử trong tuple, chuỗi, hoặc list chỉ định.

Cú pháp chúng ta sử dụng sẽ là:

org_list [index : index ] = tuple,string,list

Trong đó org_list là list ban đầu, index là vị trí cần chèn, và tuple,string, hoặc list dùng để chỉ định các phần tử cần thêm vào list ban đầu.

Ví dụ cụ thể, chúng ta chèn nhiều phần tử vào vị trí chỉ định trong list ban đầu thông qua list như sau:

mynum = list(range(3))
print(mynum)
#>> [0, 1, 2]

mynum[1:1] = [4, 5, 6]
print(mynum)
#>> [0, 4, 5, 6, 1, 2]

Một ví dụ khác khi chúng ta sử dụng tuple để chèn nhiều phần tử vào vị trí chỉ định trong list ban đầu.

mylist = ["A", "B", "C"]
mylist[2:2] = ('E', 'F')

print(mylist)
#>> ['A', 'B', 'E', 'F', 'C']

Lưu ý là khi chúng ta sử dụng chuỗi string để chèn nhiều phần tử vào vị trí chỉ định trong list ban đầu bằng cắt (slice) list, không phải là cả chuỗi đó được thêm vào như một phần tử mới, mà là từng ký tự trong chuỗi được lấy ra và thêm vào list. Ví dụ:

mylist = ["A", "B", "C"]
mylist[2:2] = 'EFG'

print(mylist)
#>> ['A', 'B', 'E', 'F', 'G', 'C']

Bằng cách ứng dụng cắt (slice) list, chúng ta cũng có thể chèn phần tử vào vị trí cuối cùng trong list python như sau:

mylist = ["1", "2", "3"]
length = len(mylist)

mylist[length:length] = ["4", "5"]
print(mylist)
#>> ['1', '2', '3', '4', '5']

Thay thế và chèn nhiều phần tử vào phạm vi chỉ định trong list ban đầu | cắt (slice) list

Một cách sử dụng khác của cắt (slice) list, chúng ta có thể vừa chèn vừa thay thế nhiều phần tử vào phạm vi chỉ định trong list ban đầu thông qua một list, tuple hoặc chuỗi string.

Ý tưởng ở đây là chúng ta sẽ cắt toàn bộ các phần tử trong một phạm vi ở list ban đầu, rồi chèn vào đó các phần tử mới đã được chứa trong tuple,string,list chỉ định.

Cú pháp chúng ta sử dụng sẽ là:

org_list [start_index : end_index ] = tuple,string,list

Trong đó org_list là list ban đầu, start_index và end_index là phạm vi cắt ra và chèn mới phần tử vào trong list ban đầu. Còn tuple,string,list là để chứa các phần tử mới cần chèn vào.

Ví dụ, chúng ta thay thế và chèn mới toàn bộ phần tử trong phạm vi index [1:3] trong list ban đầu như sau:

mynum = list(range(5))
print(mynum)
#>> [0, 1, 2, 3, 4]

mynum[1:3] = [7, 8, 9]
print(mynum)
#>> [0, 7, 8, 9, 3, 4]

Chúng ta cũng có thể sử dụng với tuple hoặc chuỗi như sau:

mynum = list(range(5))
print(mynum)
#>> [0, 1, 2, 3, 4]

mynum[1:3] = (7, 8, 9)
print(mynum)
#>> [0, 7, 8, 9, 3, 4]

mynum[1:2] = "ABC"
print(mynum)
#>> [0, 'A', 'B', 'C', 8, 9, 3, 4]
Chèn Phần Tử Vào List Trong Python
Chèn Phần Tử Vào List Trong Python

3. Cắt List Trong Python

Hướng dẫn cách cắt list trong python. Bạn sẽ học được khái niệm cắt (slice) list trong python là gì cũng như các cách cắt list trong python bằng index sau bài học này.

Cắt (slice) list trong python hay còn gọi là slice list python là thao tác lấy ra các phần tử trong một phạm vi của list ban đầu và tạo ra một list mới. Phạm vi cắt được chỉ định thông qua index của phần tử trong python.

Cú pháp cắt (slice) list trong python như sau:

org_list [ start_index : end_index : step]


Trong đó,

  • org_list là list ban đầu
  • start_index : index của phần tử ở vị trí bắt đầu cắt
  • end_index: index của phần tử ở vị trí kết thúc cắt

Lưu ý kết quả của phép cắt (slice) list python sẽ bao gồm phần tử tại vị trí bắt đầu cắt, nhưng KHÔNG bao gồm phần tử tại vị trí kết thúc cắt. Trong trường hợp bạn muốn lấy cả phần tử ở vị trí kết thúc cắt, chúng ta cần chỉ định end_index công thêm 1 đơn vị để có thể bao gồm cả phần tử đó trong kết quả phép cắt.

Ví dụ cụ thể của cắt (slice) list trong python như sau:

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums)
#>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

cut_list= nums[0:5]
print(cut_list)
#>> [0, 1, 2, 3, 4]

cut_list2 = nums[3:7]
print(cut_list2)
#>> [3, 4, 5, 6]

Lưu ý là phép cắt (slice) list trong python sẽ KHÔNG thay đổi list ban đầu mà chỉ sao chép các phần tử trong một phạm vi trong list ban đầu và tạo ra một list mới.

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

#Trước khi cắt
print(nums)
#>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

nums_cut = nums[2:7]
print(nums_cut)
#>>[2, 3, 4, 5, 6]


#Sau khi cắt thì list ban đầu cũng không thay đổi.
print(nums)
#>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Các phương pháp cắt list trong python

+ Cắt ra một phạm vi từ list ban đầu

Bằng cách chỉ định vị trí bắt đầu và vị trí kết thúc cắt bằng index của các phần tử tại các vị trí đó, chúng ta có thể cắt ra một phạm vi từ list python như ví dụ sau đây:

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[2:5]) 
#>> [2, 3, 4]

print(nums[-5: -2])
#>> [5, 6, 7]

Tương tự bạn cũng có thể cắt ra phạm vi từ một list có phần tử là các chuỗi ký tự như sau:

l = ['a','b','c','d','e']
print(l[2:4])
#>> ['c', 'd']

print(l[1:5])
#>> ['b', 'c', 'd', 'e']

Lưu ý là nếu bạn chỉ định vị trí bắt đầu hoặc kết thúc cắt bằng các giá trị index nằm ngoài phạm vi index trong list ban đầu, thì chức năng cắt (slice) list cũng chỉ có thể cắt ra phạm vi lớn nhất có thể từ list ban đầu mà thôi. Ví dụ:

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(len(nums))
#>> 10

newlist = nums[2:100]
print(newlist)
#>> [2, 3, 4, 5, 6, 7, 8, 9]

newlist2 = nums[-80:-3]
print(newlist2)
#>> [0, 1, 2, 3, 4, 5, 6]

+ Cắt ra một phạm vi từ đầu tới giữa list python

Để cắt từ đầu tới giữa list python, chúng ta lược bỏ start_index khi viết cú pháp cắt list.

Ví dụ như chúng ta viết [:5] chẳng hạn. Khi đó, python ngầm hiểu vị trí bắt đầu bằng 0 và cắt list tương tự với khi viết [0:5] như ví dụ sau:

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
newlist1= nums[0:5]
newlist2= nums[:5]

print(newlist1)
print(newlist2)

Kết quả:

[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]

+ Cắt ra một phạm vi từ giữa tới cuối list python

Để cắt (slice) list trong python từ giữa list tới cuối list, chúng ta lược bỏ end_index khi viết cú pháp cắt list.

Ví dụ như chúng ta viết [5:] chẳng hạn. Khi đó, python ngầm hiểu vị trí kết thúc bằng số phần tử của list (có thể tính bằng hàm len()) như ví dụ sau:

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
newlist3= nums[5:]
newlist4= nums[5:10]
newlist5= nums[5:len(nums)]

print(newlist3)
print(newlist4)
print(newlist5)

Kết quả:

[5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]

+ Cắt (slice) ngược list trong python

Khi chỉ định vị trí bắt đầu và kết thúc bằng index âm, chúng ta có thể cắt (slice) ngược một list trong python. Chúng ta sử dụng phương pháp này để Đảo ngược list trong python.

Ví dụ:

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[::-1])
#>> [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Chúng ta cũng có thể nhảy cóc và bỏ qua một số phần tử khi cắt ngược list ban đầu như sau:

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[::-3])
#>> [9, 6, 3, 0]

Chúng ta cũng có cắt (slice) ngược list trong python trong một phạm vi của list ban đầu như sau:

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[8:2:-1]) 
#>> [8, 7, 6, 5, 4, 3]

print(nums[-2:-9:-2])
#>> [8, 6, 4, 2]
Cắt List Trong Python
Cắt List Trong Python

4. Đảo Ngược List Trong Python

Một tutorial mô tả từng bước về 3 cách chính để đảo ngược một list trong Python.

Đảo ngược một list là một thao tác phổ biến trong lập trình Python.

Ví dụ, tưởng tượng bạn có một list gồm các tên khách hàng đã được sắp xếp mà chương trình của bạn hiển thị theo thứ tự alphabet. Một vài user muốn xem list khách hàng theo thứ tự ngược lại.

Trong bài viết này, chúng ta sẽ thấy ba cách khác nhau để đạt được mục đích mà không cần tới thư viện của bên thứ ba:

  1. Sử dụng phương thức list.reverse()
  2. Sử dụng mẹo list slicing “[::-1]”
  3. Tạo một iterator đảo ngược với hàm built-in reversed()

Option #1: Reversing a List In-Place With the list.reverse() Method

In-place ở đây nghĩa là sẽ không có list mới được tạo ra. Thay vào đó phương thức reverse() sẽ trực tiếp thay đổi đối tượng list ban đầu:

>>> mylist = [1, 2, 3, 4, 5]
>>> mylist
[1, 2, 3, 4, 5]

>>> mylist.reverse()
None

>>> mylist
[5, 4, 3, 2, 1]

Như bạn có thể thấy, việc gọi mylist.reverse() trả về None nhưng lại thay đổi đối tượng list ban đầu. Việc implement đã được lựa chọn kỹ càng bởi các nhà phát triển thư viện chuẩn Python:

The reverse() method modifies the sequence in place for economy of space when reversing a large sequence. To remind users that it operates by side effect, it does not return the reversed sequence.

Option #2: Using the “[::-1]” Slicing Trick to Reverse a Python List

List có một tính năng thú vị là slicing. Một trường hợp đặc biệt khi slicing một list với “[::-1]” sẽ tạo ra một list mới đã được đảo ngược:

>>> mylist
[1, 2, 3, 4, 5]

>>> mylist[::-1]
[5, 4, 3, 2, 1]

Đảo ngược list theo cách này tốn bộ nhớ hơn so với cách đầu tiên bởi vì nó tạo ra một shallow copy của list ban đầu. Tạo ra một shallow copy nghĩa là chỉ có container bị duplicate, còn bản thân các element trong list thì không. Vậy nên, nếu một element trong list ban đầu bị thay đổi thì shallow copy cũng sẽ bị ảnh hưởng.

Option #3: Creating a Reverse Iterator With the reversed() Built-In Function

Bản thân reversed() không đảo ngược list ban đầu, cũng chẳng tạo ra một bản copy. Thay vào đó, chúng ta nhận được một iterator đảo ngược mà từ đó chúng ta có thể duyệt qua các element của list theo thứ tự ngược:

>>> mylist = [1, 2, 3, 4, 5]
>>> for item in reversed(mylist):
...     print(item)
5
4
3
2
1
>>> mylist
>>> [1, 2, 3, 4, 5]

Ở bên trên, chúng ta chỉ lặp qua các element của list theo thứ tự ngược. Vậy làm thế nào để tạo ra một bản copy đảo ngược với hàm reversed()?

>>> mylist = [1, 2, 3, 4, 5]
>>> list(reversed(mylist))
[5, 4, 3, 2, 1]

Vậy đó! Kết quả là chúng ta thu được một shallow copy của list ban đầu.

Summary

Nếu bạn đang thắc mắc đâu là cách tốt nhất để đảo ngược một list trong Python, câu trả lời của tôi sẽ là “Còn tùy”. Theo cá nhân tôi, tôi thích cách tiếp cận thứ nhất và thứ ba:

  • Phương thức list.reverse() nhanh, rõ ràng. Nếu trong trường hợp của bạn, việc đảo ngược bản thân list ban đầu là chấp nhận được, hãy chọn cách này.
  • Nếu điều đó là không chấp nhận được, hãy sử dụng reversed().

Tôi không thích mẹo list slicing. Cú pháp của nó khá khó hiểu. Tôi tránh sử dụng nó vì lý do này.

Chú ý rằng có những cách tiếp cận khác như là tự implement từ đầu hay đảo ngược list sử dụng đệ quy – những cái hay được hỏi trong các buổi phỏng vấn nhưng không thực sự là giải pháp hay đối với lập trình Python trong thực tế. Đó là lý do mà tôi không đề cập đến nó trong tutorial này.

5. So Sánh 2 List Trong Python

Hướng dẫn cách so sánh 2 list trong python. Bạn sẽ học được các cách so sánh 2 list trong python cũng như là cách lấy ra các phần tử giống nhau và khác nhau giữa 2 list trong python sau bài học này.

Chúng ta có 4 phương pháp để so sánh 2 list trong python như sau:

  • Toán tử == và != : Kiểm tra hai list có giống nhau trong Python
  • Toán tử <, <=, >, >= :So sánh lớn nhỏ giữa 2 list trong python
  • Hàm set() python : So sánh 2 list và lấy ra các phần tử giống nhau trong python
  • Hàm set() python : So sánh 2 list và lấy ra các phần tử khác nhau trong python

Chúng ta sẽ cùng tìm hiểu các phương pháp này ở dưới đây.

So sánh 2 list trong python

Để so sánh 2 list trong python, chúng ta sử dụng tới các toán tử so sánh như so sánh bằng hoặc so sánh lớn nhỏ trong python.

+ Kiểm tra hai list có giống nhau trong Python | toán tử == và !=

Để kiểm tra hai list có giống nhau trong Python, chúng ta sử dụng toán tử so sánh bằng, và nếu như toàn bộ giá trị của các phần tử trong hai list đều giống nhau, giá trị True được trả về. Ví dụ:

print(["Red", "Blue"] == ["Red", "Blue"])
#> True
print(["Red", "Blue"] != ["Red", "Blue"])
#> False
print(["Red", "Blue"] == ["Red", "Blue", "White"])
#> False
print(["Red", "Blue"] != ["Red", "Blue", "White"])
#> True

Tương tự với phép so sánh 2 list có phần tử thuộc kiểu số:

numlist1 = [0,1,2,3]
numlist2 = [0,1,2,3]
numlist3 = [4]

print(numlist1 == numlist2)
#>> True

Lưu ý là khi so sánh 2 list trong python và kiểm tra xem chúng có giống nhau hay không, chúng ta cần chú ý tới cả thứ tự của các phần tử trong hai list. Nếu như giá trị các phần tử trong hai list là giống nhưng thứ tự của phần tử trong hai list là khác nhau, hai list này sẽ được coi là khác nhau.

print(["Red", "Blue"] == ["Red", "Blue"])
#> True

print(["Red", "Blue"] == ["Blue", "Red"])
#> False

+ So sánh lớn nhỏ giữa 2 list trong python | toán tử <, <=, >, >=

Khi sử dụng phép so sánh lớn nhỏ để so sánh 2 list trong Python, phần tử đầu tiên có giá trị khác nhau trong 2 list sẽ được dùng để so sánh.

Khi đó tùy thuộc vào phần tử trong 2 list thuộc kiểu dữ liệu nào phép so sánh 2 list trong python sẽ chuyển thành phép so sánh 2 chuỗi trong python hoặc là phép so sánh 2 số trong python v.v..

Ví dụ chúng ta so sánh lớn nhỏ giữa 2 list có phần tử thuộc kiểu chuỗi string như sau:

print(["red", "blue", "green"] > ["red", "blue", "white"])
#> False

Phép so sánh 2 list ở trên thực chất đã chuyển về phép so sánh 2 chuỗi python bằng cách so sánh các điểm mã unicode (unicode code point) của hai chuỗi như sau:

print( "green" > "white")
#>> False

Tương tự khi chúng ta so sánh lớn nhỏ giữa 2 list có phần tử thuộc kiểu số trong python:

numlist1 = [0,1,2,3]
numlist2 = [0,1,5,3]

print(numlist1 <= numlist2)
#>> True

Phép so sánh 2 list ở trên thực chất đã chuyển về phép so sánh 2 số python như sau:

print( 2 <=  5)
#>> True

Lưu ý là nếu phần tử đầu tiên có giá trị khác nhau trong 2 list thuộc các kiểu dữ liệu khác nhau, thì cũng có khả năng chúng ta không thể tiến hành so sánh chúng được.

Ví dụ:

numlist = [0,1,2,3]
mixlist =  [0,1,'Bob',3]
print(numlist1 <= numlist2)

Do lúc này, phép so sánh 2 list python ở trên sẽ chuyển về phép so sánh giữa string và số ( so sánh 2 với ‘Bob’) nên lỗi TypeError sẽ bị trả về như sau:

Traceback (most recent call last):
  File "Main.py", line 3, in <module>
    print(numlist <= mixlist)
TypeError: '<=' not supported between instances of 'int' and 'str'

So sánh 2 list và lấy ra các phần tử giống nhau trong python | hàm set() python

Trong python không có một hàm hay phương thức nào giúp chúng ta có thể so sánh trực tiếp và lấy ra các phần tử giống nhau giữa hai list cả.

Để so sánh 2 list trong python và lấy các phần tử giống nhau, chúng ta cần chuyển 2 list đã cho về kiểu set (tập hợp), sau đó mới tìm ra phần tử giống nhau giữa chúng thông qua phép tìm giao hai tập hợp bằng toán tử & trong python.

Việc chuyển list về kiểu set còn có một tác dụng nữa là giúp chúng ta xóa các phần tử trùng nhau trong list python trước khi đem chúng đi so sánh.

Sau đây, chúng ta sẽ xem ví dụ cụ thể về so sánh 2 list trong python và lấy các phần tử giống nhau giữa chúng như sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,5,3]
l3 = [0,1,'Bob',3]

print( set(l1) & set(l2) )
#>> {0, 1, 3}

print( set(l1) & set(l3) )
#>> {0, 1, 3, 'Bob'}

print(type(set(l1) & set(l3)))
#>> <class 'set'>

Sau khi thu về set kết quả chứa các phần tử giống nhau giữa 2 list đã cho, chúng ta có thể dùng vòng lặp for để lấy ra các phần tử trong set kết quả. Lưu ý là do trong set không tồn tại index nên thứ tự lấy các phần tử và in ra màn hình có thể khác nhau trong các lần thực thi.

l1 = [0,1,2,3,'Bob']
l2 = [0,1,'Bob',3]

common_s =  set (l1) & set(l2)
for i in common_s:
    print(i)
#>> 0
#>> 1
#>> 3
#>> Bob

Chúng ta cũng có thể tìm số phần tử trùng nhau giữa 2 list python bằng cách sử dụng hàm len() để đếm số phần tử trong set kết quả thu về. Ví dụ:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,'Bob',3]
commmon_count = len( set(l1) & set(l2) )
print(commmon_count)
#>> 4

Bạn cũng có thể chuyển set kết quả về kiểu list và thu về một list mới chứa các phần tử giống nhau trong 2 list ban đầu bằng cách sử dụng thêm hàm set() với hàm list() trong python như ví dụ sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,'Bob',3]

common_l = list( set (l1) & set(l2) )

print(common_l[2])
#>> Bob

Tương tự khi so sánh 2 list, bạn cũng có thể so sánh 3 list hay nhiều list với nhau và tìm ra các phần tử giống nhau trong python như sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,5,3]
l3 = [0,1,'Bob',3]
l1_l2_l3 = set(l1) & set(l2) & set(l3)
print(l1_l2_l3)
#>> {0, 1, 3}

So sánh 2 list và lấy ra các phần tử khác nhau trong python | hàm set() python

Trong python không có một hàm hay phương thức nào giúp chúng ta có thể so sánh trực tiếp và lấy ra các phần tử khác nhau giữa hai list cả.

Để so sánh 2 list trong python và lấy các phần tử khác nhau, chúng ta cần chuyển 2 list đã cho về kiểu set (tập hợp), sau đó mới tìm ra phần tử khác nhau giữa chúng thông qua phép tìm phần bù giữa hai tập hợp bằng toán tử ^ trong python.

Việc chuyển list về kiểu set còn có một tác dụng nữa là giúp chúng ta xóa các phần tử trùng nhau trong list python trước khi đem chúng đi so sánh.

Sau đây, chúng ta sẽ xem ví dụ cụ thể về so sánh 2 list trong python và lấy các phần tử khác nhau giữa chúng như sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,5,3]
l3 = [0,1,'Bob',4]

print( set(l1) ^ set(l2) )
#>> {2, 5, 'Bob'}

print( set(l1) ^ set(l3) )
#>> {2, 3, 4}

print(type(set(l1) ^ set(l3)))
#>> <class 'set'>

Sau khi thu về set kết quả chứa các phần tử khác nhau giữa 2 list đã cho, chúng ta có thể dùng vòng lặp for để lấy ra các phần tử trong set kết quả. Lưu ý là do trong set không tồn tại index nên thứ tự lấy các phần tử và in ra màn hình có thể khác nhau trong các lần thực thi.

l1 = [0,1,2,3,'Bob']
l2 = [0,1,'Bob',4]

common_s =  set (l1) ^ set(l2)
for i in common_s:
    print(i)
#>> 2
#>> 3
#>> 4

Chúng ta cũng có thể tìm số phần tử khác nhau giữa 2 list python bằng cách sử dụng hàm len() để đếm số phần tử trong set kết quả thu về.

Ví dụ:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,5,3]
commmon_count = len( set(l1) ^ set(l2) )
print(commmon_count)
#>> 3

Bạn cũng có thể chuyển set kết quả về kiểu list và thu về một list mới chứa các phần tử khác nhau trong 2 list ban đầu bằng cách sử dụng thêm hàm set() với hàm list() trong python như ví dụ sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,5,3]
commmon_count = len( set(l1) ^ set(l2) )
print(commmon_count)
#>> 3

Bạn cũng có thể chuyển set kết quả về kiểu list và thu về một list mới chứa các phần tử khác nhau trong 2 list ban đầu bằng cách sử dụng thêm hàm set() với hàm list() trong python như ví dụ sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,'Bob',4]

common_l = list( set (l1) ^ set(l2) )

print(common_l[2])
#>> 4
So Sánh 2 List Trong Python
So Sánh 2 List Trong Python

6. Xóa List Trong Python

Có một số phương pháp để xóa các phần tử khỏi một list như sau:

+ Xóa phần tử bằng phương thức remove()

fruits = ["apple", "banana", "guava"];
fruits.remove("banana")
print(fruits);

Kết quả:

['apple', 'guava']

+ Xóa phần tử bằng phương thức pop()

Phương thức pop() xóa phần tử cuối cùng của list:

fruits = ["apple", "banana", "guava"];
fruits.pop();
print(fruits);

Kết quả:

['apple', 'banana']

+ Xóa phần tử bằng lệnh del

Lệnh del được sử dụng để xóa phần tử có chỉ mục cụ thể:

fruits = ["apple", "banana", "guava"];
del fruits[0]
print(fruits);

Kết quả:

['banana', 'guava']

+ Xóa phần tử bằng phương thức clear()

fruits = ["apple", "banana", "guava"];
fruits.clear()
print(fruits);

Kết quả:

[]
Xóa List Trong Python
Xóa List Trong Python

7. Sắp Xếp List Trong Python

+ Sắp xếp List tăng dần trong Python

Trong Python, kiểu List được xây dựng sẵn một phương thức sort() để sắp xếp các phần tử trong List theo chiều tăng dẫn (mặc định của phương thức).

Ví dụ dưới đây sử dụng phương thức sort() để sắp xếp một List gồm các phần tử mang kiểu số nguyên, sắp xếp theo chiều tăng dần như sau:

# Khai bao list gom cac phan tu so nguyen
listA = [8, 1, 5, 9, 5, 2, 3, 7, 2]
# Sap xep list theo chieu tang dan
listA.sort()
# Hien thi list sau khi sap xep
print(listA)

Kết quả:

[1, 2, 2, 3, 5, 5, 7, 8, 9]

Ví dụ tiếp theo, sử dụng phương thức sort() để sắp xếp các phần tử mang kiểu chuỗi ký tự theo bảng chữ cái như sau:

# Khai bao list gom cac phan tu chuoi ky tu
listA = ["oto", "xe may", "may bay", "tau dien", "xe dap"]
# Sap xep list theo bang chu cai 
listA.sort()
# Hien thi list sau khi sap xep
print(listA)

Kết quả:

[‘may bay’, ‘oto’, ‘tau dien’, ‘xe dap’, ‘xe may’]

+ Sắp xếp List giảm dần trong Python

Việc sắp xếp một List theo chiều giảm dần cũng được thực hiện thộng qua phương thức sort() có sẵn trong Python. Trong trường hợp cần sắp xếp List giảm dần, ta cần truyền vào phương thức sort() tham số reverse = True

Ví dụ dưới đây, sử dụng sort() truyền vào tham số reverse = True để sắp xếp một List bao gồm các phần tử có kiểu dữ liệu số nguyên theo chiều giảm dần như sau:

# Khai bao list gom cac phan tu so nguyen
listA = [8, 1, 5, 9, 5, 2, 3, 7, 2]
# Sap xep list theo chieu giam dan
listA.sort(reverse = True)
# Hien thi list sau khi sap xep
print(listA)

Kết quả:

[9, 8, 7, 5, 5, 3, 2, 2, 1]

Tương tự với kiểu số, ta cũng có thể sử dụng phương thức sort() truyền vào tham số reverse = True để có thể sắp xếp một List bao gồm các chuỗi ký tự theo chiều ngược lại bảng chữ cái như sau:

# Khai bao list gom cac phan tu chuoi ky tu
listA = ["oto", "xe may", "may bay", "tau dien", "xe dap"]
# Sap xep list nguoc lai  bang chu cai 
listA.sort(reverse = True)
# Hien thi list sau khi sap xep
print(listA)

Kết quả:

[‘xe may’, ‘xe dap’, ‘tau dien’, ‘oto’, ‘may bay’]
Sắp Xếp List Trong Python
Sắp Xếp List Trong Python

8. Lấy 1 Phần Tử Trong List Python

Cùng tìm hiểu index trong python và cách truy cập phần tử trong list Python thông qua index. Bạn sẽ học được khái niệm index trong python là gì cũng như cách lấy phần tử trong list python thông qua index của phần tử đó sau bài học này.

Index trong python là gì

Index trong python là giá trị đại diện cho vị trí hoặc số thứ tự của một phần tử trong iterable (list, chuỗi..) chứa nó. Có hai kiểu index là index dương và index âm trong python.

Trong python, mỗi phần tử trong iterable sẽ được đại diện bằng một cặp index âm và dương duy nhất thể hiện vị trí của nó. Bằng cách sử dụng index của phần tử, chúng ta có thể truy cập và lấy giá trị của phần tử đó, hoặc là thay đổi giá trị của nó.

+ Index dương trong python

Index dương trong python là phương pháp chỉ định index của phần tử theo chiều tăng tiến từ trái qua phải trong iterable. Chúng ta chỉ định index dương của các phần tử bằng một dãy số dương tăng từ 0 và cộng dần một đơn vị.

Điều đó có nghĩa là phần tử đầu tiên trong iterable sẽ có index là 0, sau đó tăng dần 1, 2, 3… theo thứ tự về phía sau.

Ví dụ index dương của phần tử trong list [“Hà Nội”, “Sài Gòn”, “Đà Nẵng”] như sau:

["Thanh Hóa", "Hà Nội", "Sài Gòn", "Đà Nẵng"]
-----------------------------------------
    0         1           2          3

+ index âm trong python

Ngược với index dương thì index âm trong python là phương pháp chỉ định index của phần tử theo chiều giảm dần từ phải qua trái trong iterable. Chúng ta chỉ định index âm của các phần tử bằng một dãy số âm giảm từ -1 và trừ dần một đơn vị.

Điều đó có nghĩa là phần tử cuối cùng bên tay phải sẽ có index là -1, sau đó giảm dần -1, -2,-3… về phía đầu bên tay trái.

Ví dụ index phần tử trong list [“Hà Nội”, “Sài Gòn”, “Đà Nẵng”] như sau:

["Thanh Hóa", "Hà Nội", "Sài Gòn", "Đà Nẵng"]
---------------------------------------------
      -4        -3       -2         -1

Truy cập và lấy phần tử trong list Python bằng index

+ Cú pháp truy cập và lấy phần tử bất kỳ trong list Python

Chúng ta truy cập và lấy phần tử trong list Python bằng index với cú pháp như sau:

list [index]

Trong đó:

  • list là list mà chúng ta cần truy cập phần tử
  • index là index của phần tử trong list mà chúng ta cần truy cập.

Ví dụ, chúng ta lấy các phần tử trong list python như sau:

tỉnh = ["Thanh Hóa", "Hà Nội", "Sài Gòn", "Đà Nẵng"]
print(tỉnh[1])
#> Hà Nội

print(tỉnh[2])
#>Sài Gòn

print(tỉnh[-1])
#>Đà Nẵng

+ Truy cập và lấy phần tử cuối cùng của list (danh sách) trong Python

Chúng ta có thể truy cập và lấy phần tử cuối cùng của list (danh sách) trong Python bằng cách chỉ định index của phần tử cuối cùng đó.

Có hai cách tìm index của phần tử cuối cùng trong list như sau:

1. Tìm index dương của phần tử cuối cùng thông qua hàm len().

Ví dụ, chúng ta truy cập và lấy phần tử cuối cùng của list như sau:

provin = ["Hà Nội", "Sài Gòn", "Đà Nẵng"]
last_item_index = len(provin) - 1

last_item = provin[last_item_index]

print(last_item)
#>> Đà Nẵng

2. Sử dụng index âm của phần tử cuối cùng trong list.

Rất đơn giản, index âm của phần tử cuối cùng trong list luôn luôn bằng -1, và chúng ta có thể lấy giá trị của nó như sau:

provin = ["Hà Nội", "Sài Gòn", "Đà Nẵng"]
last_item=provin[-1]
print(last_item)
#>> Đà Nẵng

+ Lỗi IndexError

Cần lưu ý khi truy cập và lấy phần tử trong list Python thông qua index, nếu bạn chỉ định một index không tồn tại trong list thì sẽ xảy ra lỗi IndexError như sau.

tỉnh = ["Hà Nội", "Sài Gòn", "Đà Nẵng"]
print(tỉnh[3])

#>>Traceback (most recent call last):
#>>  File "", line 2, in <module>
#>>    print(tỉnh[3])
#>>IndexError: list index out of range

Lỗi này xảy ra, giống như bạn đang cố lấy tiền trong ví mà trong ví lại chả còn đồng nào ấy. Để tránh lỗi này, bạn chỉ nên chỉ định một index tồn tại trong list mà thôi.

Lấy 1 Phần Tử Trong List Python
Lấy 1 Phần Tử Trong List Python

9. Kiểm Tra Sự Tồn Tại Của Một Item Trong List

Sử dụng từ khóa in để kiểm tra sử tồn tại của một item trong một list trong Python. Ví dụ:

fruits = ["apple", "banana", "guava"];
x = "banana" in fruits;
if (x == True):
    print("\"banana\" co ton tai trong list");
else:
    print("\"banana\" khong ton tai trong list");

Kết quả:

"banana" co ton tai trong list
Kiểm Tra Sự Tồn Tại Của Một Item Trong List
Kiểm Tra Sự Tồn Tại Của Một Item Trong List

VI. Chuyển String Sang List Trong Python

Hướng dẫn cách chuyển string sang list trong Python. Bạn sẽ học được tất cả các cách chuyển string sang list trong Pythonsau bài học này.

Chúng ta có 3 phương pháp để chuyển string sang list trong Python như sau:

  • Hàm list(): chuyển string sang list trong Python
  • Phương thức split(): tách chuỗi và chuyển string sang list
  • RegEx trong Python: Tách số và ký tự trong chuỗi và chuyển string sang list trong python

Chuyển string sang list trong Python | Hàm list() python

Hàm list() trong python là một hàm tạo (constructor) trong class List và được sử dụng để tạo list từ các giá trị được chỉ định.
Bằng cách chỉ định đối số của hàm list() là một string, chúng ta có thể chuyển string sang list trong Python như ví dụ sau:

mystring =  'cityboy'
mylist= list(mystring)
print(mylist)

#>> ['c', 'i', 't', 'y', 'b', 'o', 'y']

Chúng ta cũng có thể làm tương tự với các chuỗi chứa số trong nó như sau:

mystring =  'cityboy1968'
mylist= list(mystring)
print(mylist)

#>> ['c', 'i', 't', 'y', 'b', 'o', 'y', '1', '9', '6', '8']

Tách chuỗi chỉ định và chuyển string sang list trong python | Phương thức split()

Đối với các chuỗi mà ký tự trong nó được phân cách bởi dấu phân tách hoặc các ký tự chỉ định, chúng ta có thể tách chuỗi này bằng dấu phân tách hoặc ký tự chỉ định đó và thu về kết quả dưới dạng một list bằng cách sử dụng phương thức split() trong Python.

Ví dụ, chúng ta có thể sử dụng split() và chuyển string sang list trong python với một chuỗi ban đầu có các ký tự phân tách nhau bởi dấu cách như sau:

mystring = 'Thứ 6 ngày 25 tháng 6 năm 2021'
mylist = mystring.split()
print(mylist)

#>> ['Thứ', '6', 'ngày', '25', 'tháng', '6', 'năm', '2021']

Hoặc là với một chuỗi có các ký tự được phân tách bởi chuỗi ký tự bất kỳ, chúng ta có thể tách chuỗi ban đầu bởi chuỗi đó và chuyển string sang list trong python bằng phương thức split() như sau:

mystring = 'Đỏ và đen và nâu và trắng'
mylist = mystring.split(' và ')
print(mylist)
#>> ['Đỏ', 'đen', 'nâu', 'trắng']

Cách này sẽ đặc biệt hữu dụng khi bạn muốn tạo một list từ một chuỗi liệt kê phần tử như trên.

Tách số và ký tự trong chuỗi và chuyển string sang list trong python | RegEx trong Python

Đối với các chuỗi chứa cả số và ký tự trong nó mà chúng ta muốn tách riêng số và ký tự thành các phần tử trong list python, ví dụ như chuỗi ‘Năm 2021’ thành [‘Năm’, 2021] chẳng hạn, chúng ta có thể sử dụng tới RegEx trong Python để tách số và ký tự trong chuỗi trước khi nối các kết quả thành list trong python.

Ví dụ cụ thể:

import re
mystring = 'Thứ 6 ngày 25 tháng 6 năm 2021'
m = re.findall(r'\d+', mystring)  
m1 = re.sub(r'\d','', mystring).split()

mylist = m + m1
print(m)
print(m1)
print(mylist)

#>> ['6', '25', '6', '2021']
#>> ['Thứ', 'ngày', 'tháng', 'năm']
#>> ['6', '25', '6', '2021', 'Thứ', 'ngày', 'tháng', 'năm']

Một ví dụ khác:

import re
mystring = 'a12b34c1991'
m = re.findall(r'\d+', mystring)  
m1 = re.sub(r'\d','', mystring).split()

mylist = m + m1
print(m)
print(m1)
print(mylist)

#>> ['12', '34', '1991']
#>> ['abc']
#>> ['12', '34', '1991', 'abc']

Phương pháp này sẽ đặc biệt hữu ích khi bạn cần lấy ra các dãy số trong một dải mật mã, hoặc là lấy id Facebook của một người trong một chuỗi ký tự bao gồm cả các ký tự làm nhiễu chẳng hạn.

Chuyển String Sang List Trong Python
Chuyển String Sang List Trong Python

VII. Constructor List() Là Gì

Constructor trong Python là một loại phương thức (hàm) đặc biệt được sử dụng để khởi tạo các thể hiện của lớp. Constructor có thể có hai loại.

  1. Constructor tham số.
  2. Constructor không tham số.

Định nghĩa contructor được thực thi khi chúng ta tạo đối tượng của lớp này.

Tạo contructor trong Python

Trong python, phương thức __ init __ mô phỏng contructor của lớp. Phương thức này được gọi khi lớp được khởi tạo. Chúng ta có thể chuyển bất kỳ số lượng đối số nào tại thời điểm tạo đối tượng lớp, tùy thuộc vào định nghĩa __ init __. Nó chủ yếu được sử dụng để khởi tạo các thuộc tính của lớp. Mỗi lớp phải có một constructor.

Ví dụ sau khởi tạo các thuộc tính của lớp Employee.

class Employee:
 
    def __init__(self, name, id):
        self.id = id;
        self.name = name;
 
    def display (self):
        print("ID: %d \nName: %s" % (self.id, self.name))
 
emp1 = Employee("Vinh", 101)
emp2 = Employee("Trung", 102)
 
# gọi phương thức display() để hiển thị thông tin employee 1
emp1.display();
   
# gọi phương thức display() để hiển thị thông tin employee 2
emp2.display();

Kết quả:

ID: 101 
Name: Vinh
ID: 102 
Name: Trung

Ví dụ: Đếm số lượng đối tượng của một lớp

class Student:
    count = 0
 
    def __init__(self):
        Student.count = Student.count + 1
 
s1 = Student()
s2 = Student()
s3 = Student()
print("Số lượng sinh viên là:", Student.count)

Kết quả:

Số lượng sinh viên là: 3

Ví dụ: constructor không tham số trong Python

class Student:
 
    # Constructor không tham số
    def __init__(self):
        print("Đây là constructor không tham số")
 
    def show(self, name):
        print("Hello", name)
 
student = Student()
student.show("The Mac")

Kết quả:

Đây là constructor không tham số
Hello The Mac

Ví dụ: constructor tham số trong Python

class Student:
 
    # Constructor tham số
    def __init__(self, name):
        print("Đây là constructor tham số.")
        self.name = name
 
    def show(self):
        print("Hello", self.name)
 
student = Student("The Mac")
student.show()

Kết quả:

Đây là constructor tham số.
Hello The Mac
Constructor List() Là Gì
Constructor List() Là Gì

VIII. Các Phương Thức Xử Lý List Trong Python

Python còn xây dựng sẵn rất nhiều hàm và phương thức để bạn có thể sử dụng khi làm việc với List. Bảng dưới đây liệt kê các phương thức này. Bạn truy cập link để thấy ví dụ chi tiết.

Danh sách các hàm xử lý List trong Python:

STT Hàm và Miêu tả
1 Hàm len(list)
Trả về độ dài của list
2 Hàm max(list)
Trả về phần tử có giá trị lớn nhất trong list
3 Hàm min(list)
Trả về phần tử có giá trị nhỏ nhất trong list
4 Hàm list(seq)
Chuyển đổi một tuple thành list

Danh sách các phương thức xử lý List trong Python:

STT Hàm và Miêu tả
1 Hàm list.append(obj)
Phụ thêm đối tượng obj vào cuối list
2 Hàm list.count(obj)
Đếm xem có bao nhiêu lần mà obj xuất hiện trong list
3 Hàm list.extend(seq)
Phụ thêm các nội dung của seq vào cuối list
4 Hàm list.index(obj)
Trả về chỉ mục thấp nhất trong list mà tại đó obj xuất hiện
5 Hàm list.insert(index, obj)
Chèn đối tượng obj vào trong list tại index đã cho
6 Hàm list.pop(obj=list[-1])
Xóa và trả về phần tử cuối cùng hoặc đối tượng obj có chỉ mục đã cung cấp từ list đã cho
7 Hàm list.remove(obj)
Xóa đối tượng obj từ list
8 Hàm list.reverse()
Đảo ngược thứ tự các đối tượng trong list
9 Hàm list.sort([func])
Sắp xếp các đối tượng của list, sử dụng hàm so sánh nếu được cung cấp

 

Các Phương Thức Xử Lý List Trong Python
Các Phương Thức Xử Lý List Trong Python

IX. Bài Tập List Trong Python

List trong Python là cấu trúc dữ liệu mà có khả năng lưu giữ các kiểu dữ liệu khác nhau.

List trong Python là thay đổi (mutable), nghĩa là Python sẽ không tạo một List mới nếu bạn sửa đổi một phần tử trong List.

List là một container mà giữ các đối tượng khác nhau trong một thứ tự đã cho. Các hoạt động khác nhau như chèn hoặc xóa có thể được thực hiện trên List.

Một List có thể được tạo ra bởi lưu trữ một dãy các kiểu giá trị khác nhau được phân biệt bởi các dấu phảy. Dưới đây là cú pháp để tạo List:

<ten_list>=[giatri1, giatri2, ..., giatriN];

Ví dụ:

list1 = ['vatly', 'hoahoc', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];

Một List trong Python được bao xung quanh bởi các dấu ngoặc vuông [].

Tương tự như chỉ mục của chuỗi, chỉ mục của List bắt đầu từ 0.

Truy cập các giá trị trong List trong Python

Để truy cập các giá trị trong List, bạn sử dụng cú pháp sau:

<ten_list>[index]

để lấy giá trị có sẵn tại chỉ mục đó.

Ví dụ:

list1 = ['vatly', 'hoahoc', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];

print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]

Khi code trên được thực thi sẽ cho kết quả:

list1[0]:  vatly
list2[1:5]:  [2, 3, 4, 5]

Ghi chú: Trình tổ chức bộ nhớ nội tại

List không lưu trữ các phần tử một cách trực tiếp tại chỉ mục. Sự thực là một tham chiếu được lưu trữ tại mỗi chỉ mục mà tham chiếu tới đối tượng được lưu trữ ở đâu đó trong bộ nhớ. Điều này là do một số đối tượng có thể lớn hơn một số đối tượng khác và vì thế chúng được lưu trữ tại một vị trí bộ nhớ khác.

Các hoạt động cơ bản trên List trong Python

Bạn có thể thực hiện các hoạt động nối với toán tử + hoặc hoạt động lặp với * như trong các chuỗi. Điểm khác biệt là ở đây nó tạo một List mới, không phải là một chuỗi.

Ví dụ cho nối List:

list1=[10,20]
   list2=[30,40]
   list3=list1+list2
   print list3

Kết quả là:

>>> 
   [10, 20, 30, 40]
   >>>

Ghi chú: Toán tử + ngụ ý rằng cả hai toán hạng được truyền cho nó phải là List, nếu không sẽ cho một lỗi như ví dụ sau:

list1=[10,20]
list1+30
print list1

Kết quả là:

Traceback (most recent call last):
                File "C:/Python27/lis.py", line 2, in <module>
                list1+30

Ví dụ cho lặp List:

list1=[10,20]
print list1*1

Kết quả là:

>>> 
[10, 20]
>>>

Cập nhật List trong Python

Bạn có thể cập nhật một hoặc nhiều phần tử của List bởi gán giá trị cho chỉ mục cụ thể đó. Cú pháp:

<ten_list>[index]=<giatri>

Ví dụ:

list = ['vatly', 'hoahoc', 1997, 2000];

print "Gia tri co san tai chi muc thu 2 : "
print list[2]
list[2] = 2001;
print "Gia tri moi tai chi muc thu 2 : "
print list[2]

Khi code trên được thực thi sẽ cho kết quả:

Gia tri co san tai chi muc thu 2 :
1997
Gia tri moi tai chi muc thu 2 :
2001

Phụ thêm phần tử vào cuối một List

Phương thức append() được sử dụng để phụ thêm phần tử vào cuối một List. Cú pháp:

<ten_list>.append(item)

Ví dụ:

list1=[10,"hoang",'z']
print "Cac phan tu cua List la: "
print list1
list1.append(10.45)
print "Cac phan tu cua List sau khi phu them la: "
print list1

Khi code trên được thực thi sẽ cho kết quả:

>>> 
Cac phan tu cua List la: 
[10, 'hoang', 'z']
Cac phan tu cua List sau khi phu them la: 
[10, 'hoang', 'z', 10.45]
>>>

Xóa phần tử trong List

Để xóa một phần tử trong List, bạn có thể sử dụng lệnh del nếu bạn biết chính xác phần tử nào bạn muốn xóa hoặc sử dụng phương thức remove() nếu bạn không biết. Ví dụ:

list1 = ['vatly', 'hoahoc', 1997, 2000];

print list1
del list1[2];
print "Cac phan tu cua List sau khi xoa gia tri tai chi muc 2 : "
print list1

Khi code trên được thực thi sẽ cho kết quả:

['vatly', 'hoahoc', 1997, 2000]
Cac phan tu cua List sau khi xoa gia tri tai chi muc 2 :
['vatly', 'hoahoc', 2000]

Bạn cũng có thể sử dụng del để xóa tất cả phần tử từ chi_muc_bat_dau tới chi_muc_ket_thuc như sau:

list1=[10,'hoang',50.8,'a',20,30]
print list1
del list1[0]
print list1
del list1[0:3]
print list1

Khi code trên được thực thi sẽ cho kết quả:

>>> 
[10, 'hoang', 50.8, 'a', 20, 30]
['hoang', 50.8, 'a', 20, 30]
[20, 30]
>>>
Bài Tập List Trong Python
Bài Tập List Trong Python

The post List Trong Python first appeared on Techacademy.



Nhận xét

Bài đăng phổ biến từ blog này

Vẽ Tam Giác Trong C++

Vẽ tam giác trong C++ là một trong những bài tập lập trình về C++ sử dụng vòng lặp khá hay giúp các bạn luyện tư duy code cũng như cách sử dụng vòng lặp. Dưới đây là một số lời giải các bài tập vẽ tam giác trong C++ I. Vẽ Tam Giác Cân Trong C++ Viết chương trình C++ sử dụng ký tự * để vẽ tam giác vuông cân trong C++.Chúng ta sử dụng hai vòng lặp lồng nhau để giải bài toán này. Lời Giải: #include <stdio.h> #include <stdlib.h> int main() { int n; int q = 0; printf("Chuong trinh nay se in ra tam giac can\n"); printf("Nhap chieu cao tam giac cua ban: \n"); scanf("%d",&n); while (n > 0) { for (int i = 1; i<n; i++) printf("%c", ' '); for (int k = 0; k <= q; k ++) printf("%c", '*'); n -- ; q += 2 ; printf("\n"); } return 0; } II. Vẽ Hình Tam Giác Trong C++ Viết một chương trình in ra hình

Nên học C hay C++ ? Lựa chọn nào tốt hơn

Bạn đang mới học lập trình và đang phân vân nên học lập trình C hay C++ , bài viết dưới đây của Tehcacademy.edu.vn sẽ phần nào giải đáp cho bạn thắc mắc trên.  I. Nên học ngôn ngữ lập trình C hay C++ Nếu bạn đang phân vẫn lựa chọn nên học C hay C++ thì dưới đây là một số ưu điểm và nhược điểm của ngôn ngữ lập trình C và C++. Dựa trên đánh giá này, giúp bạn lựa chọn nên học lập trình C hay C++ 1, Ưu điểm và nhược điểm của ngôn ngữ lập trình C, C++ Dưới đây là một số ưu điểm, nhược điểm của ngôn ngữ c và c++: C, C++ đều có những ưu điểm và nhược điểm riêng + Ngôn ngữ lập trình C Ưu điểm : + Hiệu suất cao Mỗi một ngôn ngữ đều dựa vào khả năng sử dụng bộ nhớ để đánh giá hiệu suất. Đây chính là ưu điểm đầu tiên của C, nó có thể chạy mượt mà trên những hệ thống giới hạn về dung lượng, lý do là vì ngay từ đầu C được thiết kế với mục đích thay thế ASM trong các hệ thống bộ nhớ cực hạn chế thập niên 1960. + Tính linh hoạt Lập trình C có 2 tính linh hoạt và là 2 ưu điểm nổi bật củ

Tìm Phần Tử Xuất Hiện Nhiều Nhất Trong Mảng C++

Tìm phần tử xuất hiện nhiều nhất trong mảng là một vấn đề phổ biến trong lập trình C++. Để giải quyết vấn đề này, bạn có thể sử dụng một số phương pháp khác nhau như sử dụng bảng băm (hash table), sắp xếp mảng và duyệt qua mảng. Cùng techacademy đi tìm hiểu chi tiết chủ đề này ngay bài viết bên dưới đây nhé. I. Tìm Phần Tử Xuất Hiện Nhiều Nhất Trong Mảng C++ Trong lập trình C++, việc tìm ra phần tử xuất hiện nhiều nhất trong một mảng là một vấn đề phổ biến và quan trọng. Điều này thường được thực hiện thông qua việc sử dụng các thuật toán và cấu trúc dữ liệu phù hợp. Chúng ta sẽ thảo luận về cách thực hiện điều này một cách hiệu quả trong ngôn ngữ lập trình C++. 1. Sử dụng Bảng Băm (Hash Map): Một cách phổ biến để giải quyết vấn đề này là sử dụng bảng băm. Chúng ta có thể duyệt qua mảng, đếm số lần xuất hiện của mỗi phần tử và lưu trữ chúng trong một bảng băm. 2. Sắp Xếp và Đếm: Một cách khác là sắp xếp mảng và sau đó duyệt qua mảng để đếm số lần xuất hiện của mỗi phần tử liên ti