Hướng dẫn nested list comprehension python - danh sách lồng nhau hiểu python

Danh sách lồng nhau của Python là gì?

Một danh sách có thể chứa bất kỳ đối tượng sắp xếp nào, ngay cả một danh sách khác (người phụ), từ đó có thể chứa chính những người phụ, v.v. Điều này được gọi là danh sách lồng nhau.nested list.

Nội phân Chính showShow

  • Danh sách lồng nhau của Python là gì?
  • Chuyển đổi danh sách danh sách thành danh sách phẳng
  • Cách tạo danh sách các danh sách trong Python
  • Những gì một danh sách các danh sách?
  • Phân tích bộ nhớ
  • Tạo một danh sách các danh sách trong Python
  • Chuyển đổi danh sách danh sách thành một danh sách
  • Python | Chuyển đổi danh sách lồng nhau thành danh sách phẳng
  • Danh sách lồng nhau trong Python

Nội phân chính

  • Danh sách lồng nhau của Python là gì?
  • Chuyển đổi danh sách danh sách thành danh sách phẳng
  • Cách tạo danh sách các danh sách trong Python
  • Những gì một danh sách các danh sách?
  • Phân tích bộ nhớ
  • Tạo một danh sách các danh sách trong Python
  • Chuyển đổi danh sách danh sách thành một danh sách
  • Python | Chuyển đổi danh sách lồng nhau thành danh sách phẳng
  • Danh sách lồng nhau trong Python
  • Nội phân chính

Những gì một danh sách các danh sách?

Chuyển đổi danh sách danh sách thành danh sách phẳng

Cách tạo danh sách các danh sách trong Python

Những gì một danh sách các danh sách?
This list contains 3 different lists of integers. We want to convert this list of lists in to a single flat list, that should contain only integers like,
[1, 2, 3, 4, 5, 11, 22, 33, 44, 55, 17, 18, 19, 20, 21]
There are different ways to do this,

Phân tích bộ nhớ

Tạo một danh sách các danh sách trong Python

Chuyển đổi danh sách danh sách thành một danh sách
Output:
Flat List : [1, 2, 3, 4, 5, 11, 22, 33, 44, 55, 17, 18, 19, 20, 21]
Although this is a single line solution but this kind of coding is not easy to maintain. So, let’s see some other options too,

Python | Chuyển đổi danh sách lồng nhau thành danh sách phẳng

Danh sách lồng nhau trong Python

Nội phân chính
It extends the existing list object by appending all the contents of given iterable. Let’s use this to convert list of lists to a flat list,
# List of list listOfList = [ [1, 2, 3, 4, 5], [11, 22, 33, 44, 55], [17, 18, 19, 20, 21] ] flatList = [] for elem in listOfList: flatList.extend(elem) print('Flat List : ', flatList)
Output:
Flat List : [1, 2, 3, 4, 5, 11, 22, 33, 44, 55, 17, 18, 19, 20, 21]
How did it worked ?

Những gì một danh sách các danh sách?

Video liên Quan

Bạn có thể sử dụng chúng để sắp xếp dữ liệu vào các cấu trúc phân cấp.

Giả sử chúng ta có một danh sách các danh sách, tức là.

# Danh sách danh sách Danh sáchflist = [[1, 2, 3, 4, 5], [11, 22, 33, 44, 55], [17, 18, 19, 20, 21]] Danh sách này chứa 3 danh sách khác nhau của số nguyên. Chúng tôi muốn chuyển đổi danh sách danh sách này thành một danh sách căn hộ duy nhất, chỉ chứa các số nguyên như, [1, 2, 3, 4, 5, 11, 22, 33, 44, 55, 17, 18, 19, 20, 20, , 21] Có nhiều cách khác nhau để làm điều này,

Sử dụng danh sách hiểu để chuyển đổi danh sách danh sách thành danh sách phẳng
Let’s use this to convert list of lists to a flat list,
flatList = [] for elem in listOfList: for item in elem: flatList.append(item) print('Flat List : ', flatList)
Output:
Flat List : [1, 2, 3, 4, 5, 11, 22, 33, 44, 55, 17, 18, 19, 20, 21]
How did it worked ?

Chúng tôi sẽ sử dụng danh sách hiểu để lặp qua danh sách danh sách và sau đó cho mỗi danh sách nội bộ lặp lại lặp lại trên các yếu tố riêng lẻ trong danh sách đó. Sau đó thêm các yếu tố đó vào một danh sách mới, tức là.

# Danh sách danh sách Danh sáchflist = [[1, 2, 3, 4, 5], [11, 22, 33, 44, 55], [17, 18, 19, 20, 21]] Danh sách danh sách vào danh sách phẳng flatlist = [item cho elem trong listoflist cho mục trong elem] in ('danh sách phẳng:', flatlist) Đầu ra: Danh sách phẳng: [1, 2, 3, 4, 5, 11, 22, 33, 44, 55, 17, 18, 19, 20, 21] Mặc dù đây là một giải pháp dòng duy nhất nhưng loại mã hóa này không dễ bảo trì. Vì vậy, hãy để chúng tôi xem một số tùy chọn khác,

Cách tạo danh sách các danh sách trong Python

Những gì một danh sách các danh sách?

Phân tích bộ nhớappend() method and list comprehension technique to create a list of lists. After creating a list of lists, we will see to access list elements as well. Let's see some examples.

Những gì một danh sách các danh sách?

Phân tích bộ nhớ: A list of lists in Python is a list object where each list element is a list by itself. Create a list of list in Python by using the square bracket notation to create a nested list [[1, 2, 3], [4, 5, 6], [7, 8, 9]].

Tạo một danh sách các danh sách trong Pythonwell-rounded Python professional—while getting paid in the process? Become a Python freelancer and order your book Leaving the Rat Race with Python on Amazon (Kindle/Print)!

Phân tích bộ nhớ

Điều quan trọng là bạn hiểu rằng một danh sách chỉ là một loạt các tham chiếu đến các vị trí bộ nhớ. Bằng cách chơi với Code Visualizer, bạn sẽ hiểu sâu hơn về cách Python hoạt động ở cốt lõi của nó:

Chỉ cần nhấp vào nút tiếp theo của người dùng để xem mỗi dòng mã mở ra như thế nào.

Tạo một danh sách các danh sách trong Python

Tạo một danh sách các danh sách bằng cách sử dụng ký hiệu khung vuông. Ví dụ: để tạo một danh sách các danh sách các giá trị số nguyên, sử dụng [[1, 2], [3, 4]]. Mỗi yếu tố danh sách của danh sách bên ngoài là một danh sách lồng nhau.

Chuyển đổi danh sách danh sách thành một danh sách

Giả sử, bạn muốn chuyển đổi một danh sách các danh sách [[1, 2], [3, 4]] thành một danh sách duy nhất [1, 2, 3, 4]. Làm thế nào để đạt được điều này? Có các tùy chọn khác nhau:

  • Danh sách hiểu [x cho l trong lst cho x in l] Giả sử bạn có danh sách các danh sách LST.
  • Giải nén [ *lst [0], *lst [1]] Giả sử bạn có danh sách hai danh sách LST.
  • Sử dụng phương thức mở rộng () của danh sách python để mở rộng tất cả các danh sách trong danh sách.

Tìm ví dụ về cả ba phương thức trong đoạn mã sau:

lst = [[1, 2], [3, 4]] # Phương pháp 1: Liệt kê hiểu flat_1 = [x cho l trong lst cho x trong l] # phương pháp 2: Giải nén flat_2 = [ *lst [0], *lst . 1, 2, 3, 4] in (Flat_3) # [1, 2, 3, 4]

Do tính đơn giản và hiệu quả của nó, phương pháp hiểu danh sách đầu tiên là vượt trội so với hai phương pháp khác.

Python | Chuyển đổi danh sách lồng nhau thành danh sách phẳng

Nhiệm vụ là chuyển đổi một danh sách lồng nhau thành một danh sách duy nhất trong Python, dù có có bao nhiêu cấp độ làm tổ trong danh sách Python, tất cả đều phải được gỡ bỏ để chuyển đổi nó thành một trong tất cả các giá trị của tất cả Danh sách bên trong dấu ngoặc ngoài cùng nhưng không có bất kỳ dấu ngoặc bên trong.

Examples:

Đầu vào: L = [1, 2, [3, 4, [5, 6]], 7, 8, [9, [10]] đầu ra: L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Output : l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Đầu vào: l = [[[‘item1,‘ item2,]], [[‘item3,‘ item4,]]
Output : l = [‘item1’, ‘item2’, ‘itm3, ‘item4”]

Danh sách lồng nhau trong Python

Danh sách toàn diện là một trong những tính năng tuyệt vời nhất của Python. Đó là một cách thông minh và ngắn gọn để tạo danh sách bằng cách lặp lại một đối tượng có thể lặp lại. Sự hiểu biết danh sách lồng nhau không là gì ngoài sự hiểu biết danh sách trong một danh sách hiểu khác khá giống với lồng nhau cho các vòng lặp.

Hãy cùng xem một số ví dụ để hiểu những gì mà sự hiểu biết danh sách lồng nhau có thể làm:

Ví dụ 1:

Tôi muốn tạo một ma trận trông giống như bên dưới: ma trận = [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]]

Mã dưới đây sử dụng lồng nhau cho các vòng lặp cho tác vụ đã cho:

ma trận = []

Đối với tôi trong phạm vi (5):

# Nối một người phụ trợ trống bên trong danh sách

Matrix.Append ([])

Đối với J trong phạm vi (5):

ma trận [i] .Append (j)

in (ma trận)

Output:

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

Đầu ra tương tự có thể đạt được bằng cách sử dụng danh sách lồng nhau chỉ trong một dòng:

# Danh sách lồng nhau hiểu

Matrix = [[J cho J trong phạm vi (5)] cho i trong phạm vi (5)]

in (ma trận)

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

Explanation:

Đầu ra tương tự có thể đạt được bằng cách sử dụng danh sách lồng nhau chỉ trong một dòng:

# Danh sách lồng nhau hiểu

Matrix = [[J cho J trong phạm vi (5)] cho i trong phạm vi (5)]
is simply the variable i itself and hence we append its output to the list while i
iterates from 0 to 4.

Đầu ra: [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4] , [0, 1, 2, 3, 4]]]

Cú pháp của chương trình trên được hiển thị bên dưới:
solve the expression and then append its output to the list.

[Biểu thức cho I trong phạm vi (5)] -> có nghĩa là thực thi biểu thức này và nối đầu ra của nó vào danh sách cho đến khi biến I lặp lại từ 0 đến 4.
example discussed above.

Ví dụ:- [i cho I trong phạm vi (5)]-> Trong trường hợp này, đầu ra của biểu thức chỉ đơn giản là biến i và do đó chúng tôi nối đầu ra của nó vào danh sách trong khi tôi lặp lại từ 0 đến 4.

Do đó, đầu ra sẽ là -> [0, 1, 2, 3, 4]
be total 5 iterations. Hence the final output would just be a list of the output of the
above expression repeated 5 times.

Nhưng trong trường hợp của chúng tôi, bản thân biểu thức là một danh sách hiểu. Do đó, trước tiên chúng ta cần giải quyết biểu thức và sau đó nối đầu ra vào danh sách.

Biểu thức = [j cho j trong phạm vi (5)] -> Đầu ra của biểu thức này giống như ví dụ được thảo luận ở trên.

Do đó biểu thức = [0, 1, 2, 3, 4].

Bây giờ chúng tôi chỉ cần thêm đầu ra này cho đến khi biến I lặp lại từ 0 đến 4, sẽ là tổng số 5 lần lặp. Do đó, đầu ra cuối cùng sẽ chỉ là một danh sách đầu ra của biểu thức trên được lặp lại 5 lần.

Đầu ra: [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4] , [0, 1, 2, 3, 4]]]

Ví dụ 2:

Giả sử tôi muốn làm phẳng một danh sách 2-D đã cho: ma trận = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] , 4, 5, 6, 7, 8, 9]

Điều này có thể được thực hiện bằng cách sử dụng lồng nhau cho các vòng như sau:

Danh sách # 2-D

Ma trận = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]]

In (Flatten_Matrix)

Đầu ra: [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9]

Một lần nữa, điều này có thể được thực hiện bằng cách sử dụng khả năng hiểu danh sách lồng nhau đã được hiển thị dưới đây:

Danh sách # 2-D

Ma trận = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]]

# Danh sách lồng nhau hiểu để làm phẳng một ma trận 2 chiều đã cho

Flatten_matrix = [Val cho tua lại trong ma trận cho val trong tua lại]

In (Flatten_Matrix)

Đầu ra: [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9]

Explanation:

Một lần nữa, điều này có thể được thực hiện bằng cách sử dụng khả năng hiểu danh sách lồng nhau đã được hiển thị dưới đây:
to another list. For better understanding, we can divide the list comprehension into
three parts:

Flatten_matrix = [Val cho tua lại trong ma trận cho val trong tua lại]

Trong trường hợp này, chúng ta cần lặp qua từng phần tử trong danh sách 2 chiều đã cho và nối nó vào danh sách khác. Để hiểu rõ hơn, chúng ta có thể chia danh sách hiểu thành ba phần:
outer loop and the third line is the inner loop.

Dòng đầu tiên gợi ý những gì chúng tôi muốn nối vào danh sách. Dòng thứ hai là vòng ngoài và dòng thứ ba là vòng bên trong.

Đối với người phụ trong Ma trận, trả về những người phụ bên trong Ma trận từng cái một là:

[1, 2, 3], [4, 5], [6, 7, 8, 9]

‘Đối với Val trong Sublist, trả về tất cả các giá trị bên trong trình phụ.

Do đó, nếu sublist = [1, 2, 3], ‘đối với val trong nhóm phụ -> cho 1, 2, 3 làm đầu ra từng cái một.

Đối với mỗi Val như vậy, chúng tôi nhận được đầu ra là Val và chúng tôi nối nó vào danh sách.

Ví dụ 3:

Giả sử tôi muốn làm phẳng một danh sách 2 chiều nhất định và chỉ bao gồm những chuỗi có độ dài nhỏ hơn 6:

Các hành tinh = [[‘Mercury,‘ Venus, ‘Trái đất], [‘ Mars, ‘Jupiter,‘ Saturn,], [‘Uranus,‘ Hải Vương, ‘Sao Diêm Vương]]]

Đầu ra mong đợi: Flatten_planets = [‘Venus,‘ Trái đất, ‘Mars,‘ Sao Diêm Vương]]

Điều này có thể được thực hiện bằng cách sử dụng một điều kiện nếu bên trong một vòng lặp được hiển thị bên dưới:

# 2-D Danh sách các hành tinh

Các hành tinh = [['Mercury', 'Venus', 'Earth'], ['Mars', 'Jupiter', 'Saturn'], ['Uranus', 'Sao Hải Vương', 'Sao Diêm Vương']]]]]]]]

Flatten_planets = []

cho người phụ trong các hành tinh:

Đối với hành tinh trong Dists:

Nếu Len (Hành tinh) <6:

Flatten_planets.append (hành tinh)

In (Flatten_Planets) ['Venus', 'Earth', 'Mars', 'Pluto']

Đầu ra: ['Venus', 'Trái đất', 'Mars', 'Sao Diêm Vương']]]

Điều này có thể được thực hiện bằng cách sử dụng một điều kiện nếu bên trong một vòng lặp được hiển thị bên dưới:

# 2-D Danh sách các hành tinh

Các hành tinh = [['Mercury', 'Venus', 'Earth'], ['Mars', 'Jupiter', 'Saturn'], ['Uranus', 'Sao Hải Vương', 'Sao Diêm Vương']]]]]]]]

Flatten_planets = []

Flatten_planets.append (hành tinh)

In (Flatten_Planets) ['Venus', 'Earth', 'Mars', 'Pluto']

Explanation:

Đầu ra: ['Venus', 'Trái đất', 'Mars', 'Sao Diêm Vương']]]
need an extra if condition to check if the length of a particular planet is less than
6 or not.

Điều này cũng có thể được thực hiện bằng cách sử dụng các toàn bộ danh sách lồng nhau đã được hiển thị dưới đây:

Flatten_planets = []

cho người phụ trong các hành tinh:

Đối với hành tinh trong Dists:

Nếu Len (Hành tinh) <6:

python-list

Flatten_planets.append (hành tinh)

In (Flatten_Planets)

python-list