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

Python hiểu danh sách lồng nhau đang tạo một danh sách mới từ danh sách lồng nhau. Trong bài viết này, chúng ta sẽ xem cách đạt được mức độ hiểu danh sách lồng nhau trong python từng bước

 

Python hiểu danh sách lồng nhau (Từng bước) -

Chà, lúc đầu việc hiểu danh sách lồng nhau có vẻ phức tạp. Nhưng nếu chúng ta làm từng bước một, sự hiểu biết này trở nên thật dễ dàng

Bước 1

Đây là bước tiên quyết để chúng ta tạo một danh sách lồng nhau

var_list=[[1,2,4],[3,6],[8],[2,5,6,6,3]]

Đây chỉ là một danh sách giả để hiểu các thủ thuật. Bạn có thể chọn một danh sách khác theo kịch bản của bạn

Bước 2

Trong bước này, chúng tôi sẽ cố gắng làm phẳng danh sách. Để đạt được điều này, chúng tôi có hai phương pháp

Phương pháp 1

Đây là một phương pháp nội tuyến để hiểu danh sách lồng nhau. Tất cả những gì bạn cần để sử dụng dòng dưới đây để làm phẳng danh sách đầy đủ

flattened_list = [ ele for inner_list in var_list for ele in inner_list]

Phương pháp 2

Không giống như, Ở trên, chúng tôi đã phân tán vòng lặp trong mã nhiều dòng. Điều này làm cho mã dễ đọc hơn vì sự phản ánh logic của nó. Đây là mẫu mã cho việc này

flattened_list = [] 
for inner_list in var_list: 
    for ele in inner_list: 
        flattened_list.append(ele) 

Xem, Ở đây chúng tôi đã sử dụng lồng hai cấp. Nhưng nếu bạn có danh sách phức tạp hơn hoặc lồng nhau. Bạn cần điều chỉnh vòng lặp cho phù hợp

Ta có thể lấy ví dụ ta muốn ghép từng phần tử của 2 danh sách thì lời giải chung sẽ như thế này

list1 = [1,2]
list2 = [4,5]

combinedList = []
for i in list1:
    for j in list2:
        combinedList.append(tuple((i,j)))

print(combinedList) #[(1, 4), (1, 5), (2, 4), (2, 5)]

Nhưng chúng ta có thể sử dụng khả năng hiểu danh sách để làm điều này trong một dòng

list1 = [1,2]
list2 = [4,5]
combinedList = [(i,j) for i in list1 for j in list2]
print(combinedList)

đầu ra

[(1, 4), (1, 5), (2, 4), (2, 5)]

Nếu chúng ta thấy hình thức hiểu chung về danh sách thì nó sẽ là

[i,j,k for i in ITERABLE1 for j in ITERABLE2 for k in ITERABLE3 ......(and so on)]

Hiểu danh sách if-else trong Python

Đây là kiểu hiểu danh sách được sử dụng nhiều nhất trong python, nơi chúng ta có thể tạo danh sách từ một lần lặp dựa trên một số điều kiện

Nó được sử dụng phổ biến nhất để hiểu vòng lặp bên trong danh sách

Một ví dụ cho việc hiểu danh sách if-else bên trong sẽ là tìm số chẵn và số lẻ trong bất kỳ danh sách nào

some_list = [1,4,7,12,19,22, 23, 26]
new_list = ["{} is even".format(i) if(i%2==0) else "{} It is odd".format(i) for i in some_list]
print(new_list)

đầu ra

['1 là lẻ', '4 là chẵn', '7 là lẻ', '12 là chẵn', '19 là lẻ', '22 là chẵn', '23 là lẻ', '26 là

Hiểu danh sách lồng nhau

Có thể sử dụng khả năng hiểu danh sách trong danh sách lồng nhau của danh sách khác

Ví dụ để chuyển vị trí các hàng và cột của ma trận bằng cách sử dụng khả năng hiểu danh sách lồng nhau trong Python

someMatrix = [
    [3, 5, 1, 6],
    [1, 0, 9, 5],
    [4, 14, 22, 17],
]
transpose = [[row[i] for row in someMatrix] for i in range(len(someMatrix[0]))]
print(transpose) # [[3, 1, 4], [5, 0, 14], [1, 9, 22], [6, 5, 17]]

Logic của việc hiểu danh sách trên tương tự như đoạn mã sau

numList = []
for i in range(10):
    numList.append(i)
0

Khi nào nên tránh sử dụng cách hiểu Danh sách?

Cảm thấy hào hứng khi sử dụng khả năng hiểu danh sách ở mọi nơi trong mã của bạn?

Sử dụng quá nhiều khả năng hiểu Danh sách trong python sẽ khiến mã của bạn không thể đọc được

Vâng, khả năng hiểu danh sách rất hữu ích để viết mã Pythonic đẹp hơn. Bạn luôn nên sử dụng khả năng hiểu danh sách trong Python nhưng vẫn duy trì khả năng đọc mã

Nếu bạn sử dụng khả năng hiểu danh sách cho một vấn đề rất phức tạp thì việc đọc mã của bạn sẽ là cơn ác mộng đối với các nhà phát triển khác

Hãy luôn nhớ một điều, những gì bạn biết về mã của bạn, người khác sẽ mất thời gian để hiểu nó. Vì vậy, với tư cách là nhà phát triển có trách nhiệm, chúng ta cần viết mã mà người khác có thể đọc mà không gặp vấn đề gì

Bạn có thể sử dụng khả năng hiểu danh sách một cách tự do trong mã không dành cho con người đọc như trong các bài kiểm tra lập trình (đó là nơi tôi sử dụng nó nhiều nhất)

Phần kết luận

Có vẻ như rất tuyệt khi sử dụng danh sách Hiểu ở mọi nơi. Nhưng nó có chi phí riêng của nó

Việc hiểu danh sách làm cho mã khó hiểu, bạn luôn nên tránh nén danh sách trong các trường hợp phức tạp

Là một nhà phát triển có trách nhiệm, chúng ta nên bình luận mã đúng cách khi chúng ta sử dụng nén danh sách vì nó sẽ giúp người khác dễ dàng hiểu mã

Bạn có thể tự do sử dụng tính năng nén danh sách khi bạn không muốn con người đọc mã hoặc bạn muốn trình đọc mã tập trung vào các phần khác của mã ngoài phần đó (đã nén)

Hiểu lồng nhau trong Python là gì?

Đó là một cách thông minh và ngắn gọn để tạo danh sách bằng cách lặp qua một đối tượng có thể lặp lại. Khả năng hiểu danh sách lồng nhau không có gì khác ngoài việc hiểu danh sách trong một mức hiểu danh sách khác khá giống với các vòng lặp for lồng nhau.

Khả năng hiểu danh sách trong Python có nhanh hơn 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. cái này chậm. lưu ý bên lề. Nó thậm chí còn tệ hơn nếu đó là một Mảng Numpy chứ không phải một danh sách.

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

Như đã thấy ở trên, 3 cách nhanh nhất để tính số bình phương là. Nặng nề (63. 5ms) Chuyển đổi Numpy thành danh sách (1. 68s) Đọc hiểu danh sách (3. những năm 93)

Làm thế nào bạn có thể tạo danh sách lồng nhau trong Python?

Danh sách Python lồng nhau . Sau đó, chúng ta sẽ tạo một danh sách lồng nhau khác bằng cách đặt hai danh sách không trống bên trong một danh sách, được phân tách bằng dấu phẩy như cách chúng ta làm với các phần tử danh sách thông thường. create a nested list by putting an empty list inside of another list. Then, we'll create another nested list by putting two non-empty lists inside a list, separated by a comma as we would with regular list elements.