HomeLập trìnhPythonLiệt kê mức...

Liệt kê mức độ hiểu trong Python được giải thích cho người mới bắt đầu


Hiểu danh sách là một cách dễ đọc, nhỏ gọn và thanh lịch để tạo danh sách từ bất kỳ đối tượng có thể lặp lại hiện có nào. Về cơ bản, đây là cách đơn giản hơn để tạo danh sách mới từ các giá trị trong danh sách bạn đã có.

Nó thường là một dòng mã đặt trong dấu ngoặc vuông. Bạn có thể sử dụng nó để lọc, định dạng, sửa đổi hoặc thực hiện các tác vụ nhỏ khác trên các lần lặp hiện có, chẳng hạn như chuỗi, bộ dữ liệu, bộ, khung dữ liệu, danh sách mảng, v.v.

Trong bài học ngắn này, chúng ta sẽ xem một số cách khác nhau để tạo khả năng hiểu danh sách và xem một số biến thể của nó như:

  • Hiểu danh sách đơn giản
  • Liệt kê khả năng hiểu với các điều kiện if đơn và lồng nhau
  • Liệt kê khả năng hiểu với một và nhiều điều kiện if và other
  • Hiểu danh sách với các vòng lặp for lồng nhau

Ngoài ra, chúng ta cũng sẽ xem xét các khái niệm sau:

  • Đối với các vòng lặp so với hiểu danh sách
  • Những lợi ích của việc hiểu danh sách là gì?
  • Khi nào nên sử dụng và khi nào nên tránh hiểu danh sách.

Danh sách hiểu trong Python là gì?

Vì vậy, hãy bắt đầu với cú pháp hiểu danh sách. Khả năng hiểu danh sách là một dòng mã mà bạn viết bên trong dấu ngoặc vuông. Nó có ba thành phần:

  1. cho vòng lặp
  2. Điều kiện và biểu hiện
  3. đầu ra
Cú pháp hiểu danh sách, cách hoạt động của tính năng hiểu danh sách
Cú pháp hiểu danh sách -Lập trình viên lỗi tín dụng

Ví dụ về hiểu danh sách đơn giản

Đoạn mã dưới đây là một ví dụ về cách hiểu danh sách đơn giản nhất. Ở đây chúng ta chỉ lặp qua lst và lưu trữ tất cả phần tử của nó trong danh sách a:

lst = [1,2,3,4,5,6,7,8,9,10]
# simple list comprehension
a = [x for x in lst]
print(a)
 
# ouput
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Đoạn mã trên tương đương với điều này:

for x in lst:
    a.append(x)

Để đạt được điều này, chúng ta thậm chí không cần phương thức append trong cách hiểu danh sách.

Bây giờ trong đoạn mã trên (hiểu danh sách), bạn có thể sử dụng bất kỳ biểu thức nào để sửa đổi các thành phần của lstVí dụ:

# add any number to every elements of lst and store it in a
a = [x+1 for x in lst]
 
# subtract any number to every elements of lst and store it in a
a = [x-1 for x in lst]
 
# multiply any number to every elements of lst and store it in a
a = [x*2 for x in lst]

Danh sách hiểu với điều kiện đơn và lồng nhau

Khi hiểu danh sách, chúng ta cũng có thể thêm một if điều kiện, có thể giúp chúng tôi lọc dữ liệu. Ví dụ: trong đoạn mã dưới đây, chúng tôi đang lưu trữ tất cả các giá trị của lst trong danh sách c có giá trị lớn hơn 4:

lst = [1,2,3,4,5,6,7,8,9,10]
# with if condition
c = [x for x in lst if x > 4]
print(c)
 
# output
[5, 6, 7, 8, 9, 10]

Đoạn mã trên tương đương với điều này:

for x in lst:
    if x > 4:
        a.append(x)

Chúng ta cũng có thể thêm một nested if điều kiện để hiểu danh sách của chúng tôi. Ví dụ: trong đoạn mã dưới đây, chúng tôi đang lưu trữ tất cả các phần tử của lst trong danh sách d có giá trị lớn hơn 4 và chia hết cho 2:

# with multiple if 
d = [x for x in lst if x > 4 if x%2 == 0]
 
# output
[6, 8, 10]

Mã trên tương đương với điều này:

for x in lst:
    if x > 4:
        if x % 2 == 0:
            a.append(x)

Danh sách hiểu với một và nhiều điều kiện nếu và khác

Được rồi, bây giờ chúng ta sẽ xem cách chúng ta có thể thêm else với if trong việc hiểu danh sách.

Đọc thêm  Cách gửi thông báo đến Ứng dụng web của bạn bằng Python

Ở đây chúng tôi đã tạo một cách hiểu danh sách đơn giản sẽ lưu trữ tất cả các giá trị của lst trong danh sách e có giá trị lớn hơn 4 – ngược lại nếu giá trị nhỏ hơn 4 thì nó sẽ lưu chuỗi “less than 4” ở vị trí của nó.

lst = [1,2,3,4,5,6,7,8,9,10]
# with if and else condition
e = [x if x > 4 else 'less than 4' for x in lst]
print(e)
 
# output
['less than 4', 'less than 4', 'less than 4', 'less than 4', 5, 6, 7, 8, 9, 10]

Đoạn mã trên tương đương với điều này:

for x in lst:
    if x > 4:
        d.append(x)
    else: 
        d.append('less than 4')

Bây giờ hãy xem cách hiểu danh sách với nhiều if and else.

Trong ví dụ dưới đây, chúng tôi đang lưu trữ chuỗi “Two” nếu giá trị chia hết cho 2. Hoặc nếu giá trị chia hết cho 3 thì chúng tôi đang lưu trữ “Three”khác chúng tôi đang lưu trữ “not 2 & 3”.

# with more than one if and else condition
f = ['Two' if x%2 == 0 else "Three" if x%3 == 0 else 'not 2 & 3' for x in lst]
print(f)
 
# output
['not 2 & 3', 'Two', 'Three', 'Two', 'not 2 & 3', 'Two', 'not 2 & 3', 'Two', 'Three', 'Two']

Vì vậy, làm thế nào để làm việc này? Để hiểu điều này, chúng ta có thể chia toàn bộ điều kiện thành ba phần, sau mỗi phần khác:

'Two' if x%2 == 0 else "Three" if x%3 == 0 else 'not 2 & 3'

Ở đây, nếu lần đầu tiên if điều kiện là đúng thì nó sẽ nhận giá trị “Two” – nếu không nó sẽ chuyển sang thứ hai if điều kiện, thay vì lưu trữ bất kỳ giá trị nào khác, giống như elif chỉ huy.

Đọc thêm  Cách gọi một hàm trong Python – Ví dụ về cú pháp Def

Bây giờ trong lần thứ hai if điều kiện, nó sẽ tiết kiệm “Three” nếu tuyên bố là đúng. Nếu không, nó sẽ kiểm tra điều kiện tiếp theo mà chúng ta không có. Vì vậy, bất cứ giá trị nào theo sau else sẽ được lưu trữ, mà trong trường hợp của chúng tôi là một chuỗi “not 2 & 3”.

Vì vậy, theo cách truyền thống ở trên, chúng ta có thể viết toàn bộ mã như thế này:

for x in lst:
    if x%2 == 0:
        f.append('Two')
    elif x%3 == 0:
        f.append('Three')
    else: 
        f.append('not 2 & 3')

Bạn có thấy sức mạnh của việc hiểu danh sách không? Nó đang thực hiện nhiệm vụ chỉ trong một dòng mà vòng lặp for truyền thống thực hiện trong 7.

Bạn cũng có thể đọc bài viết này ➡ Giải quyết thử thách fizzbuzz Python với khả năng hiểu danh sách để tìm hiểu thêm.

Danh sách hiểu với vòng lặp lồng nhau

Ổn thỏa! Bây giờ chúng ta sẽ xem cách hiểu danh sách hoạt động với một nested for loop.

Để hiểu những gì đang xảy ra ở đây, hãy xem ví dụ dưới đây. Ở đây chúng tôi đang tạo ra tất cả các kết hợp có thể có của [1,2,3] và [3,2,1].

lst = [1,2,3]
lst_rev = [3,2,1]
g = [(x,y) for x in lst for y in lst_rev]
print(g)
 
#output
[(1, 3), (1, 2), (1, 1), (2, 3), (2, 2), (2, 1), (3, 3), (3, 2), (3, 1)]

Đoạn mã trên cũng có thể được viết là:

for x in lst:
    for y in lst_rev:
        f.append((x,y))

Được rồi, như đã hứa, bây giờ chúng ta hãy xem so sánh giữa vòng lặp for và khả năng hiểu danh sách.

Đối với vòng lặp so với hiểu danh sách

Ở trên, chúng ta đã thấy cách hiểu danh sách có thể hoàn thành một tác vụ chỉ trong một dòng mà một vòng lặp for hoàn thành trong nhiều dòng.

Đọc thêm  In câu lệnh trong Python – Cách in bằng lệnh cú pháp mẫu

Khả năng hiểu danh sách không chỉ nhỏ gọn mà còn dễ đọc và nhanh hơn so với vòng lặp for về mặt hiệu suất.

Trong một số trường hợp, khả năng hiểu danh sách dường như nhanh hơn hai lần so với vòng lặp for. Nếu bạn muốn biết thêm về hiệu suất của việc hiểu danh sách, bạn có thể tìm hiểu về nó tại đây.

Nhưng nếu bạn muốn thực hiện nhiều hơn một điều kiện đơn giản, khả năng hiểu danh sách sẽ không thể xử lý mà không ảnh hưởng đến khả năng đọc. Đây là một vấn đề lớn với việc hiểu danh sách.

Lợi ích của việc hiểu danh sách

Ngoài việc đơn giản, nhỏ gọn và nhanh hơn, khả năng hiểu danh sách còn đáng tin cậy trong nhiều tình huống khác nhau. Và bạn có thể sử dụng nó trong nhiều hoàn cảnh khác nhau.

Bạn có thể sử dụng khả năng hiểu danh sách để ánh xạ và lọc ngoài việc tạo danh sách cơ bản. Bạn không cần phải áp dụng một chiến lược mới cho từng tình huống. Đó là một trong những lý do nó được coi là Pythonic hơn vòng lặp for.

Khi nào nên sử dụng hiểu danh sách (và khi nào nên tránh nó)

Bạn có thể sử dụng khả năng hiểu danh sách nếu bạn đang thực hiện tác vụ lọc, sửa đổi hoặc định dạng đơn giản trên các đối tượng lặp khác. Nó cũng là một lựa chọn tốt nếu bạn muốn giữ cho mã của mình nhỏ gọn và dễ đọc.

Ngoài ra, bạn có thể sử dụng nó khi thậm chí một chút hiệu suất cũng quan trọng với bạn.

Nhưng bạn nên tránh sử dụng tính năng hiểu danh sách nếu bạn có quá nhiều điều kiện cần thêm để lọc hoặc sửa đổi vì nó sẽ khiến mã của bạn phức tạp hơn và khó đọc hơn.

Phần kết luận

Trong bài viết này, chúng ta đã biết hiểu danh sách là gì, lợi ích của nó là gì và khi nào chúng ta nên sử dụng nó. Và chúng tôi đã thấy cách hiểu danh sách đơn giản, dễ đọc, nhỏ gọn và nhanh hơn vòng lặp for.

Chúng ta cũng đã học cách viết hiểu danh sách có hoặc không có điều kiện, với if và other lồng nhau và vòng lặp for lồng nhau.

Nếu bạn thích bài viết này, thì chắc chắn bạn cũng sẽ thích các blog khác của tôi. Bạn có thể truy cập trang web cá nhân của tôi ở đây.



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status