Hiểu danh sách trong định nghĩa Python là gì?

Python được biết đến với việc giúp chúng tôi tạo mã thanh lịch, dễ viết và đọc gần như bằng tiếng Anh đơn giản. Khả năng hiểu danh sách là một trong những tính năng nổi bật nhất của ngôn ngữ này, cho phép chúng tôi phát triển chức năng phức tạp chỉ bằng một dòng mã. Mặt khác, nhiều người viết Python phải vật lộn để sử dụng đầy đủ các khía cạnh phức tạp hơn của việc hiểu danh sách. Đôi khi các lập trình viên có thể lạm dụng chúng, dẫn đến mã kém hiệu quả và khó đọc hơn nhiều

Sử dụng danh sách hiểu

Ở đây chúng tôi đang chỉ ra cách sử dụng cơ bản của việc hiểu danh sách

Mã số

đầu ra

Tất cả điều này có thể được thực hiện chỉ với một dòng mã bằng cách sử dụng khả năng hiểu danh sách

Mã số

đầu ra

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

Các vòng lặp và bản đồ thường được coi là Pythonic hơn là khả năng hiểu danh sách. Tuy nhiên, thay vì đánh giá theo mệnh giá đó, bạn nên xem xét những lợi thế của việc sử dụng khả năng hiểu danh sách trong Python so với các lựa chọn thay thế. Chúng ta sẽ tìm hiểu về một vài trường hợp khi các lựa chọn thay thế là những lựa chọn thích hợp hơn ở phần sau

Một trong những lợi thế quan trọng nhất của việc sử dụng khả năng hiểu danh sách trong Python là nó là một công cụ duy nhất có thể được sử dụng trong nhiều trường hợp khác nhau. Chúng ta không cần áp dụng một chiến lược mới cho từng tình huống. Khả năng hiểu danh sách có thể được tận dụng để lập bản đồ hoặc lọc và tạo danh sách cơ bản

Khả năng hiểu danh sách được coi là Pythonic, vì Python nhấn mạnh các công cụ đơn giản, hiệu quả có thể được sử dụng trong nhiều tình huống. Như một phần thưởng, chúng ta sẽ không phải nhớ thứ tự thích hợp của các tham số khi sử dụng khả năng hiểu danh sách trong Python, như khi chúng ta gọi map[]

Việc hiểu danh sách dễ đọc và nắm bắt hơn các vòng lặp vì chúng mang tính khai báo hơn. Chúng ta phải tập trung vào cách chính xác danh sách được xây dựng trong khi sử dụng các vòng lặp. Chúng ta phải tạo một danh sách trống theo cách thủ công, sau đó lặp lại các mục của danh sách và thêm từng mục vào cuối danh sách. Thay vào đó, bằng cách sử dụng khả năng hiểu danh sách trong Python, chúng ta có thể tập trung vào những gì chúng ta muốn đưa vào danh sách và cho phép Python xử lý việc tạo danh sách

Mã số

đầu ra

Time taken by for loop: 7.005999803543091
Time taken by list comprehension: 2.822999954223633

Sử dụng khả năng hiểu danh sách để lặp qua chuỗi

Khả năng hiểu danh sách cũng có thể được sử dụng trong trường hợp chuỗi vì chúng cũng có thể lặp lại

Mã số

đầu ra

['j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't']

Sử dụng Điều kiện trong Danh sách Hiểu

Các câu lệnh có điều kiện có thể được sử dụng bằng cách hiểu danh sách để thay đổi các danh sách hiện có [hoặc các bộ dữ liệu khác]. Chúng tôi sẽ tạo một danh sách với các toán tử, số và một loạt các giá trị

Mã số

đầu ra

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]

Hiểu danh sách lồng nhau

Khả năng hiểu danh sách lồng nhau tương tự như vòng lặp for lồng nhau ở chỗ chúng là cách hiểu danh sách bên trong cách hiểu danh sách khác. Chương trình thực hiện vòng lặp lồng nhau như sau

Mã số

đầu ra

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

Giờ đây, kết quả tương tự có thể được tạo ra với ít dòng mã hơn bằng cách sử dụng khả năng hiểu danh sách theo lớp

Mã số

đầu ra

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

Khả năng hiểu danh sách là một công cụ mạnh mẽ để mô tả và tạo danh sách mới dựa trên danh sách hiện có. Nói chung, việc hiểu danh sách nhẹ hơn và dễ sử dụng hơn các hàm và vòng lặp xây dựng danh sách truyền thống. Để cung cấp mã thân thiện với người dùng, chúng ta nên tránh viết mã lớn để hiểu danh sách. Mọi diễn giải của danh sách hoặc các lần lặp khác có thể được viết lại trong một vòng lặp for, nhưng không phải tất cả các vòng lặp for đều có thể được xây dựng lại trong khuôn khổ hiểu danh sách

Một tính năng của Python mà nhiều lập trình viên yêu thích là khả năng viết mã thanh lịch, dễ đọc và gần như dễ viết như tiếng Anh thuần túy. Tính năng hiểu danh sách Python cho phép bạn tạo chức năng mạnh mẽ chỉ bằng một vài dòng mã

Khả năng hiểu danh sách trong Python cho phép chúng ta tạo một danh sách trong Python bằng cú pháp rất ngắn và đơn giản hơn. Về cơ bản, đây là cách đơn giản hơn để tạo một danh sách mới từ các giá trị trong danh sách mà chúng ta đã có. Đó là một cú pháp rất phổ biến được nhiều lập trình viên sử dụng để làm cho mã của họ trông rất thanh lịch hoặc một lớp.

Nó thường là một dòng mã được đặt trong dấu ngoặc vuông

Giống như trong hình trên, chúng ta có 3 giai đoạn mã trong một dòng, được đặt trong ngoặc đơn. Phần đầu tiên ra lệnh cho đầu ra, phần thứ hai - có thể lặp lại và phần thứ ba - điều kiện

Lấy đi. Khả năng hiểu danh sách trong Python là một dòng mã mà chúng ta viết bên trong dấu ngoặc vuông. Nó thường được gọi là mã một lớp. Và, Khả năng hiểu danh sách cung cấp một cú pháp ngắn hơn và đơn giản hơn để xây dựng danh sách mới dựa trên các giá trị trong danh sách hiện có

Cú pháp hiểu danh sách trong Python

Dưới đây đưa ra là cú pháp của việc hiểu danh sách trong Python

mylist = [output/expression for item in iterable if condition == True]

Hiểu danh sách chủ yếu có ba thành phần

  1. cho vòng lặp. Nó là bắt buộc và lặp lại trên lần lặp đã cho
  2. Điều kiện và biểu hiện. Nó là tùy chọn và được sử dụng để ngụ ý một số điều kiện trong quá trình lặp lại
  3. đầu ra. Nó là bắt buộc và biến [hoặc biểu thức] mà chúng tôi cung cấp dưới dạng đầu ra sẽ được thêm vào danh sách của chúng tôi

Vòng lặp lặp đi lặp lại để tạo danh sách mới. Điều kiện kiểm tra xem có bao gồm hay không mục danh sách [hoặc bất kỳ kiểm tra nào khác] dựa trên một số điều kiện và cuối cùng, chúng tôi cũng có đầu ra hoặc biểu thức đánh giá mỗi phần tử mới được thêm vào danh sách của chúng tôi

Chúng ta sẽ hiểu rõ hơn điều này thông qua mã. Chúng ta hãy xem cách tạo khả năng hiểu danh sách trong Python

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

Chúng ta hãy xem xét cách sử dụng hiểu danh sách rất cơ bản trong Python, sau đó chúng ta sẽ chuyển sang các ví dụ thực tế và hữu ích hơn ở phía trước

ví dụ 1. vòng lặp đơn giản

Mã số

def simplest_list_comp[ls]:
    mylist = [i for i in ls]
    print["My list is:",mylist]

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

đầu ra

My list is: [1, 5, 6, 7, 8, 9]

Giải trình

  • Trong ví dụ trên, chúng ta có một vòng lặp for lặp qua danh sách đã truyền. Tuy nhiên, chúng tôi không có bất kỳ điều kiện nào ở đây
  • Đối với đầu ra, chúng tôi đã thông qua i. Vì vậy, đầu ra của chúng tôi chỉ đơn giản là các phần tử của iterable trong danh sách mới của chúng tôi

Thêm một số điều kiện vào đoạn mã trên -- Bây giờ chúng ta hãy thêm một số điều kiện vào đoạn mã trước và kiểm tra xem nó hoạt động như thế nào

Mã số

________số 8

đầu ra

My list is: [6, 8, 10, 12]

Giải trình. Bạn vừa thấy rằng chúng tôi đã thêm một điều kiện để kiểm tra xem các phần tử trong danh sách của chúng tôi là chẵn hay lẻ?

phải lưu ý. Ngoài ra, bạn phải lưu ý rằng bằng cách sử dụng tính năng hiểu danh sách, chúng tôi đang tạo một danh sách hoàn toàn mới dựa trên các điều kiện, khả năng lặp lại, v.v. Tuy nhiên, chúng tôi KHÔNG SỬA ĐỔI danh sách ban đầu được chuyển cho chúng tôi dưới dạng "có thể lặp lại". Xoắn đầu ra của chúng tôi trong danh sách kết quả - Bây giờ chúng ta hãy thêm một số xoắn vào giá trị của đầu ra mà chúng tôi sẽ nhận được sau khi hiểu danh sách

Mã số

['j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't']
0

đầu ra

['j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't']
1

Giải trình. Chúng tôi chỉ bình phương giá trị của các phần tử mà chúng tôi nhận được sau khi áp dụng điều kiện trên lần lặp đã qua của chúng tôi. Vì vậy, đây là cách chúng ta có thể sử dụng bất kỳ biểu thức nào trong đầu ra của mình [ví dụ ở đây là tôi] để sửa đổi các thành phần trong danh sách của chúng ta

Sử dụng các vòng lặp thông thường của chúng tôi

Để hiểu rõ hơn, bạn cũng có thể tham khảo đoạn mã tương tự dưới đây, được viết mà không sử dụng tính năng hiểu danh sách [chỉ sử dụng vòng lặp for]

Mã số

['j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't']
2

Vì vậy, bạn hẳn đã thấy, cách mã nhiều dòng này được viết trong một dòng bằng cách sử dụng khả năng hiểu danh sách

ví dụ 2. Danh sách hiểu với vòng lặp for lồng nhau

Bây giờ, chúng ta sẽ tìm hiểu cách chúng ta có thể sử dụng khả năng hiểu danh sách bằng cách sử dụng các vòng lặp for lồng nhau trong Python

Mã số

['j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't']
3

đầu ra

['j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't']
4

Giải trình. Ở đây, chúng tôi được cung cấp một danh sách danh sách, trong đó chúng tôi đang tạo một danh sách danh sách khác và một danh sách đơn giản, sử dụng cách hiểu danh sách. Xin lưu ý cách chúng tôi đã viết mã của chúng tôi

  1. [[i for i in j] for j in ls] câu lệnh này trước tiên sẽ chạy đoạn mã này. đối với j trong ls, nó chọn danh sách từ ls sang j
  2. Sau đó, [i for i in j] dòng này chọn từng phần tử từ danh sách vào i và thêm vào danh sách khác

Đoạn mã trên là để tạo danh sách danh sách. Tuy nhiên, nếu chúng tôi muốn tạo một danh sách, chúng tôi làm theo các bước dưới đây

  1. [j for i in ls for j in i] Trong dòng này, đầu tiên chúng ta chạy vòng lặp qua danh sách ls, và đặt kết quả vào i
  2. Sau đó, chúng ta lặp qua i bằng vòng lặp j. Và, chúng tôi xuất j của chúng tôi là kết quả

Ngoại lệ. Giả sử, để tạo một danh sách đơn giản, chúng tôi sẽ viết mã này

Mã số

def simplest_list_comp[ls]:
    mylist = [i for i in ls]
    print["My list is:",mylist]

simplest_list_comp[[1,5,6,7,8,9]]
0

đầu ra

def simplest_list_comp[ls]:
    mylist = [i for i in ls]
    print["My list is:",mylist]

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

Nó đưa ra một lỗi bởi vì, trình biên dịch của chúng ta sẽ đọc mã từ trái sang phải và khi nó tìm thấy i trong j, nó sẽ ngay lập tức đưa ra một lỗi rằng j chưa được xác định vì chúng ta chưa đặt bất kỳ phần tử nào của ls vào j

mã tương đương

def simplest_list_comp[ls]:
    mylist = [i for i in ls]
    print["My list is:",mylist]

simplest_list_comp[[1,5,6,7,8,9]]
2

Điều này tương đương với mã vòng lặp để hiểu danh sách trên. Bạn có thể thấy chúng tôi đã mã hóa rất nhiều dòng mã này thành một lớp lót hiệu quả như thế nào trong các ví dụ trên. Đây là nơi mà việc hiểu danh sách rất hữu ích và trông cũng rất thanh lịch

Sử dụng logic có điều kiện trong việc hiểu danh sách

Chúng ta đã thấy làm thế nào chúng ta có thể sử dụng logic có điều kiện trong việc hiểu danh sách. Nhưng bây giờ, chúng ta sẽ thảo luận về cách chúng ta có thể sử dụng các điều kiện lồng nhau trong Danh sách hiểu

ví dụ 1. Liệt kê các cách hiểu với nhiều điều kiện If và Else

Mã số

def simplest_list_comp[ls]:
    mylist = [i for i in ls]
    print["My list is:",mylist]

simplest_list_comp[[1,5,6,7,8,9]]
3

đầu ra

def simplest_list_comp[ls]:
    mylist = [i for i in ls]
    print["My list is:",mylist]

simplest_list_comp[[1,5,6,7,8,9]]
4

Giải trình

  • Đầu tiên, vòng lặp của chúng ta chạy với a trong ls và sau đó nó khớp với điều kiện a+10 if a

Chủ Đề