Python danh sách hiểu danh sách lồng nhau

Chạy tính năng hiểu danh sách trên danh sách lồng nhau sẽ tạo danh sách mới bằng cách thực hiện thao tác trên từng phần tử lồng nhau. Trong bài đăng này, tôi sẽ giải thích cách chạy tính năng hiểu danh sách lồng nhau và đề cập đến một số câu hỏi phổ biến mà người dùng có

Khả năng hiểu danh sách lồng nhau trong Python là gì?

Hiểu danh sách là một phương thức trong Python tạo danh sách mới bằng cách chạy một thao tác trên danh sách hiện có. Khả năng hiểu danh sách lồng nhau là khi quy trình này được chạy trên một danh sách các danh sách trong đó mỗi phần tử và danh sách lồng nhau được vận hành theo. Giải pháp thay thế phổ biến cho việc sử dụng tính năng hiểu danh sách lồng nhau là vòng lặp for, vòng lặp này thường chậm hơn và yêu cầu nhiều mã hơn

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

Dưới đây là một ví dụ về cú pháp để hiểu danh sách tiêu chuẩn

list_ = [1,2,3,4]

new_list = [x * 2 for x in list_ if x%2 == 0]

"""
Output:
[4, 8]
"""

"""
The verbal equivelant of this syntax would be:

["Do this operation" for "These values" if "This condition is met"]
"""

Ví dụ đơn giản về cú pháp hiểu danh sách lồng nhau

Phát triển dựa trên ví dụ tiêu chuẩn, đây là cú pháp để hiểu danh sách lồng nhau

nested_list = [[1,2],[3,4]]

new_list = [[x * 2 for x in sublist] for sublist in nested_list]

"""
Output: 
[[2, 4], [6, 8]]
"""

Các lựa chọn thay thế để hiểu danh sách lồng nhau trong Python

Khi tạo danh sách mới từ danh sách hiện có, có sẵn một số lựa chọn thay thế. Hãy so sánh hai lựa chọn thay thế phổ biến nhất. cho các hàm vòng lặp và lambda

Sự khác biệt giữa hiểu danh sách và vòng lặp for là gì?

Sự khác biệt chính giữa hiểu danh sách và vòng lặp for là tốc độ. Nói chung, việc hiểu danh sách nhanh hơn vòng lặp for khi chạy các thao tác để tạo danh sách mới. Một điểm khác biệt nhỏ nữa là việc hiểu danh sách dẫn đến mã sạch hơn vì nó chiếm ít dòng hơn so với vòng lặp for

Khả năng hiểu danh sách có nhanh hơn vòng lặp for không?

Có, khả năng hiểu danh sách thường nhanh hơn vòng lặp for khi tạo danh sách mới

Sự khác biệt giữa chức năng lambda và hiểu danh sách là gì?

Sự khác biệt chính giữa khả năng hiểu danh sách và hàm lambda là khả năng hiểu danh sách tạo ra một danh sách mới, trong khi hàm lambda có thể dẫn đến một danh sách mới hoặc một giá trị. Một sự khác biệt nữa là tốc độ. Trong hầu hết các trường hợp sử dụng điển hình, khả năng hiểu danh sách tạo danh sách mới nhanh hơn hàm lambda

Lambda có nhanh hơn khả năng hiểu danh sách không?

Cả hàm lambda và khả năng hiểu danh sách đều là những phương pháp hiệu quả để tạo danh sách mới trong Python, nhưng nhìn chung khả năng hiểu danh sách là phương pháp nhanh hơn để tạo danh sách mới

Ví dụ hiểu danh sách lồng nhau trong Python

Giả sử rằng bạn có một danh sách lồng nhau trong Python và bạn muốn chạy tính năng hiểu danh sách trên từng phần tử của danh sách lồng nhau

Dưới đây là hai ví dụ về cách điều này có thể được thực thi, dẫn đến một danh sách nối đơn hoặc giữ nguyên cấu trúc lồng nhau ban đầu

Hiểu danh sách trên danh sách lồng nhau và nối với một ví dụ về danh sách

Ví dụ này sẽ chạy một thao tác trên từng phần tử của danh sách lồng nhau và tạo một danh sách mới với cấu trúc lồng nhau hiện có

Sử dụng khả năng hiểu danh sách, chúng tôi muốn nối bất kỳ giá trị nào lớn hơn mười vào danh sách mới. Chúng ta có thể làm điều này như sau

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

Python danh sách hiểu danh sách lồng nhau

Ngoài

[11, 19, 25, 12]

Learn Data Science with

Giải pháp này về cơ bản tuân theo quy trình tương tự như sử dụng vòng lặp

[11, 19, 25, 12]

Learn Data Science with

8 để thực hiện công việc, nhưng sử dụng khả năng hiểu danh sách thường có thể là một kỹ thuật gọn gàng và hiệu quả hơn. Ví dụ dưới đây cho thấy cách chúng ta có thể tạo danh sách mới bằng cách sử dụng vòng lặp
[11, 19, 25, 12]

Learn Data Science with

8

new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

Ngoài

[11, 19, 25, 12]

Learn Data Science with

Sử dụng khả năng hiểu danh sách thay vì vòng lặp

[11, 19, 25, 12]

Learn Data Science with

8, chúng tôi đã quản lý để gói bốn dòng mã vào một câu lệnh rõ ràng

Trong bài viết này, trước tiên chúng ta sẽ xem xét các cách khác nhau để sử dụng tính năng hiểu danh sách để tạo danh sách mới. Sau đó, chúng ta sẽ xem lợi ích của việc sử dụng khả năng hiểu danh sách là gì. Cuối cùng, chúng ta sẽ xem cách giải quyết vấn đề hiểu nhiều danh sách

Cách hiểu danh sách hoạt động

Khả năng hiểu danh sách hoạt động bằng cách dịch các giá trị từ danh sách này sang danh sách khác bằng cách đặt câu lệnh

[11, 19, 25, 12]

Learn Data Science with

8 bên trong một cặp dấu ngoặc, được gọi chính thức là biểu thức trình tạo

Trình tạo là một đối tượng có thể lặp lại, mang lại một loạt các giá trị. Hãy xem xét ví dụ sau, trong đó

new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

2 là trình tạo của chúng tôi và
new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

3 là năng suất

nested_list = [[1,2],[3,4]]

new_list = [[x * 2 for x in sublist] for sublist in nested_list]

"""
Output: 
[[2, 4], [6, 8]]
"""
2

Ngoài

nested_list = [[1,2],[3,4]]

new_list = [[x * 2 for x in sublist] for sublist in nested_list]

"""
Output: 
[[2, 4], [6, 8]]
"""
3

Trong trường hợp này, Python đã lặp qua từng mục trong

[11, 19, 25, 12]

Learn Data Science with

7, lưu trữ tạm thời các giá trị bên trong biến
new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

3. Chúng tôi chưa thêm bất kỳ điều kiện nào vào phần hiểu danh sách, vì vậy tất cả các giá trị được lưu trữ trong danh sách mới

Câu lệnh điều kiện trong việc hiểu danh sách

Hãy thử thêm vào một câu lệnh

new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

6 để việc hiểu chỉ thêm các số lớn hơn bốn

nested_list = [[1,2],[3,4]]

new_list = [[x * 2 for x in sublist] for sublist in nested_list]

"""
Output: 
[[2, 4], [6, 8]]
"""
7

Ngoài

nested_list = [[1,2],[3,4]]

new_list = [[x * 2 for x in sublist] for sublist in nested_list]

"""
Output: 
[[2, 4], [6, 8]]
"""
8

Hình ảnh dưới đây đại diện cho quá trình tiếp theo trong phần hiểu danh sách trên

Python danh sách hiểu danh sách lồng nhau

Chúng tôi thậm chí có thể thêm vào một điều kiện khác để bỏ qua các số nhỏ hơn tám. Ở đây, chúng ta có thể sử dụng

new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

7 bên trong cách hiểu danh sách

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

00

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

01

Nhưng chúng ta cũng có thể viết điều này mà không cần

new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

7 như

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

02

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

01

Khi sử dụng câu điều kiện, Python sẽ kiểm tra xem câu lệnh

new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

6 của chúng ta trả về
[11, 19, 25, 12]

Learn Data Science with

0 hay
[11, 19, 25, 12]

Learn Data Science with

1 cho mỗi kết quả. Khi câu lệnh
new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

6 trả về
[11, 19, 25, 12]

Learn Data Science with

0, kết quả được thêm vào danh sách mới

Thêm chức năng để hiểu danh sách

Khả năng hiểu danh sách không chỉ giới hạn trong việc lọc ra các giá trị danh sách không mong muốn mà chúng ta còn có thể sử dụng chúng để áp dụng chức năng cho các giá trị được thêm vào. Ví dụ: giả sử chúng tôi muốn tạo một danh sách chứa các giá trị bình phương từ danh sách ban đầu

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

04

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

05

Chúng tôi cũng có thể kết hợp bất kỳ chức năng bổ sung nào với các toán tử so sánh. Chúng ta đã sử dụng rất nhiều từ

[11, 19, 25, 12]

Learn Data Science with

7, vì vậy hãy thay đổi nó và bắt đầu sử dụng một danh sách khác cho các ví dụ của chúng ta

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

06

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

07

Trong ví dụ trên, khả năng hiểu danh sách của chúng tôi đã bình phương bất kỳ giá trị nào trong

[11, 19, 25, 12]

Learn Data Science with

5 nằm trong khoảng từ ba mươi đến năm mươi. Để giúp chứng minh những gì đang xảy ra ở trên, hãy xem sơ đồ bên dưới

Python danh sách hiểu danh sách lồng nhau

Sử dụng toán tử so sánh

Khả năng hiểu danh sách cũng hoạt động với

[11, 19, 25, 12]

Learn Data Science with

6,
[11, 19, 25, 12]

Learn Data Science with

7 và
[11, 19, 25, 12]

Learn Data Science with

8

Giống như trong ví dụ trên khi sử dụng

new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

7, chúng ta cũng có thể sử dụng
[11, 19, 25, 12]

Learn Data Science with

6

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

08

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

09

Sử dụng

[11, 19, 25, 12]

Learn Data Science with

7, chúng tôi cũng có thể kiểm tra các danh sách khác

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

0

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

1

Tương tự như vậy,

nested_list = [[1,2],[3,4]]

new_list = [[x * 2 for x in sublist] for sublist in nested_list]

"""
Output: 
[[2, 4], [6, 8]]
"""
22 cũng có thể

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

2

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

3

Cuối cùng, chúng ta có thể sử dụng các câu lệnh

new_list = []
for num in num_list:
    if num > 10:
        new_list.append(num)
new_list

Learn Data Science with

6 trước các biểu thức trình tạo trong phạm vi hiểu danh sách. Bằng cách này, chúng ta có thể cho Python biết cách xử lý các giá trị khác nhau

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

4

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

5

Ví dụ trên lưu trữ các giá trị trong danh sách mới của chúng tôi nếu chúng lớn hơn bốn mươi; . Python lưu trữ số không ở vị trí của chúng đối với các giá trị không lớn hơn bốn mươi, theo hướng dẫn của

nested_list = [[1,2],[3,4]]

new_list = [[x * 2 for x in sublist] for sublist in nested_list]

"""
Output: 
[[2, 4], [6, 8]]
"""
25. Xem hình ảnh bên dưới để biết hình ảnh đại diện cho những gì đang xảy ra

Python danh sách hiểu danh sách lồng nhau

Hiểu nhiều danh sách

Đương nhiên, bạn có thể muốn sử dụng cách hiểu danh sách với hai danh sách cùng một lúc. Các ví dụ sau minh họa các trường hợp sử dụng khác nhau để hiểu nhiều danh sách

Làm phẳng danh sách

Synax sau đây là phiên bản phổ biến nhất của hiểu nhiều danh sách, mà chúng tôi sẽ sử dụng để làm phẳng một danh sách các danh sách

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

6

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

7

Thứ tự của các vòng lặp trong kiểu hiểu danh sách này hơi phản trực giác và khó nhớ, vì vậy hãy chuẩn bị để tra cứu lại trong tương lai. Dù vậy, cú pháp làm phẳng danh sách vẫn hữu ích cho các bài toán khác yêu cầu kiểm tra hai danh sách để tìm giá trị

danh sách lồng nhau

Chúng ta có thể sử dụng khả năng hiểu nhiều danh sách khi có liên quan đến danh sách lồng nhau. Giả sử chúng ta có một danh sách các danh sách được điền bằng các giá trị kiểu chuỗi. Nếu chúng tôi muốn chuyển đổi các giá trị này từ kiểu chuỗi sang kiểu số nguyên, chúng tôi có thể thực hiện việc này bằng cách sử dụng nhiều cách hiểu danh sách như sau

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

8

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

9

khả năng đọc

Vấn đề với việc sử dụng nhiều cách hiểu danh sách là chúng có thể khó đọc, gây khó khăn hơn cho các nhà phát triển khác và chính bạn trong tương lai. Để chứng minh điều này, đây là giải pháp đầu tiên trông như thế nào khi kết hợp khả năng hiểu danh sách với vòng lặp

[11, 19, 25, 12]

Learn Data Science with

8

[11, 19, 25, 12]

Learn Data Science with

0

Ngoài

new_list = [num for num in num_list if num > 10]
new_list

Learn Data Science with

9

Giải pháp kết hợp của chúng tôi không bóng bẩy khi nhìn vào, nhưng cũng dễ dàng hơn để phân tách và tìm ra điều gì đang xảy ra đằng sau hậu trường. Không có giới hạn về mức độ hiểu nhiều danh sách có thể đi sâu. Nếu

nested_list = [[1,2],[3,4]]

new_list = [[x * 2 for x in sublist] for sublist in nested_list]

"""
Output: 
[[2, 4], [6, 8]]
"""
27 có nhiều danh sách được lồng trong các danh sách lồng nhau của nó, chúng ta có thể thực hiện chuyển đổi số nguyên như sau

[11, 19, 25, 12]

Learn Data Science with

2

Ngoài

[11, 19, 25, 12]

Learn Data Science with

3

Như ví dụ cho thấy, việc hiểu nhiều danh sách của chúng tôi hiện đã trở nên rất khó đọc. Người ta thường đồng ý rằng việc hiểu nhiều danh sách không nên đi sâu hơn hai cấp độ; . Để chứng minh quan điểm, đây là cách chúng ta có thể sử dụng vòng lặp for để giải quyết vấn đề trên

[11, 19, 25, 12]

Learn Data Science with

4

Ngoài

[11, 19, 25, 12]

Learn Data Science with

3

Kiểm tra tốc độ. Danh sách hiểu vs. cho vòng lặp

Khi làm việc với các danh sách trong Python, có thể bạn sẽ thường thấy mình trong các tình huống cần dịch các giá trị từ danh sách này sang danh sách khác dựa trên các tiêu chí cụ thể

Nói chung, nếu bạn đang làm việc với các tập dữ liệu nhỏ, thì sử dụng vòng lặp

[11, 19, 25, 12]

Learn Data Science with

8 thay vì hiểu danh sách không phải là tận thế. Tuy nhiên, khi kích thước tập dữ liệu của bạn bắt đầu tăng lên, bạn sẽ nhận thấy rằng việc xử lý danh sách từng mục một có thể mất nhiều thời gian

Hãy tạo một danh sách mười nghìn số ngẫu nhiên, có giá trị từ một đến một triệu và lưu trữ danh sách này dưới dạng

[11, 19, 25, 12]

Learn Data Science with

7. Sau đó, chúng tôi có thể sử dụng vòng lặp
[11, 19, 25, 12]

Learn Data Science with

8 và khả năng hiểu danh sách để tạo danh sách mới chứa các giá trị
[11, 19, 25, 12]

Learn Data Science with

7 lớn hơn nửa triệu. Cuối cùng, sử dụng
nested_list = [[1,2],[3,4]]

new_list = [[x * 2 for x in sublist] for sublist in nested_list]

"""
Output: 
[[2, 4], [6, 8]]
"""
32, chúng ta có thể so sánh tốc độ của hai cách tiếp cận

[11, 19, 25, 12]

Learn Data Science with

6

Ngoài

gõmicro giây1danh sách hiểu288. 850 cho vòng lặp416. 94

Giải pháp hiểu danh sách chạy nhanh gấp đôi, do đó, nó không chỉ sử dụng ít mã hơn mà còn nhanh hơn nhiều. Với ý nghĩ đó, cũng đáng lưu ý rằng các vòng lặp

[11, 19, 25, 12]

Learn Data Science with

8 có thể dễ đọc hơn nhiều trong một số trường hợp nhất định, chẳng hạn như khi sử dụng nhiều cách hiểu danh sách

Cuối cùng, nếu bạn đang ở một vị trí cần phải hiểu nhiều danh sách, bạn có muốn ưu tiên hiệu suất hơn khả năng đọc hay không là tùy thuộc vào bạn.

Bản tóm tắt

Khả năng hiểu danh sách là một công cụ tuyệt vời để tạo danh sách mới dựa trên yêu cầu của bạn. Chúng nhanh hơn nhiều so với sử dụng vòng lặp

[11, 19, 25, 12]

Learn Data Science with

8 và có thêm lợi ích là làm cho mã của bạn trông gọn gàng và chuyên nghiệp

Đối với những trường hợp bạn đang làm việc với danh sách lồng nhau, bạn cũng có thể hiểu nhiều danh sách. Khái niệm sử dụng khả năng hiểu lúc đầu có vẻ hơi phức tạp, nhưng một khi bạn đã hiểu chúng, bạn sẽ không bao giờ nhìn lại

Bắt đầu học miễn phí

Nhận thông tin cập nhật trong hộp thư đến của bạn

Tham gia cùng hơn 7.500 người học khoa học dữ liệu

Bài viết gần đây

Ưu đãi khóa học tốt nhất cho Thứ Sáu Đen và Thứ Hai Điện Tử 2022
Hàm sigmoid
chấm sản phẩm
7 khóa học về trí tuệ nhân tạo (AI) tốt nhất năm 2022

Các khóa học Python tốt nhất theo phân tích dữ liệu

Trong số khoảng 3000 dịch vụ, đây là những khóa học Python tốt nhất theo phân tích này

xem bài viết


Nhận thông tin cập nhật trong hộp thư đến của bạn

Tham gia cùng hơn 7.500 người học khoa học dữ liệu

Gặp gỡ các tác giả

Python danh sách hiểu danh sách lồng nhau

Nhà khoa học dữ liệu Alfie Grace

Alfie tốt nghiệp Thạc sĩ Kỹ thuật Cơ khí tại Đại học College London. Anh ấy hiện đang làm Nhà khoa học dữ liệu tại Square Enix. Tìm anh ấy trên LinkedIn

Bạn có thể lồng khả năng hiểu danh sách trong Python không?

Hóa ra, bạn có thể lồng khả năng hiểu danh sách vào một khả năng hiểu danh sách khác để giảm thêm mã của bạn và vẫn dễ đọc hơn. Trên thực tế, không có giới hạn về số lần hiểu mà bạn có thể lồng vào nhau, điều này giúp bạn có thể viết mã rất phức tạp trong một dòng.

Khả năng hiểu danh sách có nhanh hơn vòng lặp for không?

Việc hiểu danh sách nhanh hơn vòng lặp for để tạo danh sách . Tuy nhiên, điều này là do chúng tôi đang tạo danh sách bằng cách thêm các phần tử mới vào danh sách đó ở mỗi lần lặp lại.

Danh sách lồng nhau giải thích bằng ví dụ trong Python là gì?

Như chúng ta đã biết, danh sách đó có thể chứa bất kỳ đối tượng nào, vì vậy ở đây khái niệm danh sách lồng nhau được giới thiệu. Vì vậy, đơn giản, khi có một danh sách chứa một danh sách bên trong chính nó là một phần tử (danh sách con) hoặc dữ liệu, thì danh sách đó được gọi là danh sách lồng nhau