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)0Khi 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)