Hướng dẫn how do i merge a list of lists in python? - làm cách nào để hợp nhất một danh sách các danh sách trong python?

Đối với độ phẳng một cấp, nếu bạn quan tâm đến tốc độ, điều này nhanh hơn bất kỳ câu trả lời nào trước đây trong mọi điều kiện tôi đã thử. . bằng Slice (là bản sao khối cấp thấp hơn bất kỳ phương thức Iterator nào):

def join(a):
    """Joins a sequence of sequences into a single sequence.  (One-level flattening.)
    E.g., join([(1,2,3), [4, 5], [6, (7, 8, 9), 10]]) = [1,2,3,4,5,6,(7,8,9),10]
    This is very efficient, especially when the subsequences are long.
    """
    n = sum([len(b) for b in a])
    l = [None]*n
    i = 0
    for b in a:
        j = i+len(b)
        l[i:j] = b
        i = j
    return l

Danh sách thời gian sắp xếp với nhận xét:

[(0.5391559600830078, 'flatten4b'), # join() above. 
(0.5400412082672119, 'flatten4c'), # Same, with sum(len(b) for b in a) 
(0.5419249534606934, 'flatten4a'), # Similar, using zip() 
(0.7351131439208984, 'flatten1b'), # list(itertools.chain.from_iterable(a)) 
(0.7472689151763916, 'flatten1'), # list(itertools.chain(*a)) 
(1.5468521118164062, 'flatten3'), # [i for j in a for i in j] 
(26.696547985076904, 'flatten2')] # sum(a, [])

Câu trả lời ngắn gọn: Để làm phẳng danh sách danh sách của bạn lst, hãy sử dụng Danh sách Hiểu được lồng nhau [x for l in lst for x in l] để lặp lại trong tất cả các danh sách lồng nhau (for l in lst) và trên tất cả các yếu tố của chúng (for x in l). Mỗi yếu tố x, bạn chỉ cần đặt trong danh sách bên ngoài, không thay đổi.

Khi duyệt Stackoverflow, thỉnh thoảng tôi lại gặp câu hỏi này: Làm thế nào để tham gia một danh sách danh sách? Suy nghĩ đầu tiên của tôi là người hỏi đang đề cập đến hàm tham gia () chuyển đổi một điều đáng tin (như danh sách) thành một chuỗi bằng cách kết hợp các yếu tố của nó.How to Join a List of Lists?“. My first thought is that the asking person is referring to the join() function that converts an iterable (such as a list) to a string by concatenating its elements.

Nhưng không có gì có thể là xa hơn từ sự thật! Câu hỏi thường là về việc làm phẳng danh sách: Để chuyển đổi danh sách danh sách lồng nhau như [[1, 2, 3], [4, 5, 6]] thành danh sách phẳng ____10. Vì vậy, câu hỏi thực sự là:

Vấn đề: Đưa ra một danh sách các danh sách. Làm thế nào để làm phẳng danh sách các danh sách bằng cách loại bỏ các danh sách bên trong và giữ các yếu tố của họ?: Given a list of lists. How to flatten the list of lists by getting rid of the inner lists—and keeping their elements?

Ví dụ: Bạn muốn chuyển đổi một danh sách đã cho thành một danh sách phẳng như ở đây:: You want to transform a given list into a flat list like here:

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

# ... Flatten the list here ...

print(lst)
# [2, 2, 4, 1, 2, 3, 4, 1, 2, 3]
Solution: Sử dụng Tuyên bố hiểu danh sách lồng nhau [x for l in lst for x in l] để làm phẳng danh sách.
Hướng dẫn how do i merge a list of lists in python? - làm cách nào để hợp nhất một danh sách các danh sách trong python?

Solution: Use a nested list comprehension statement [x for l in lst for x in l] to flatten the list.

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

# ... Flatten the list here ...
lst = [x for l in lst for x in l]

print(lst)
# [2, 2, 4, 1, 2, 3, 4, 1, 2, 3]

Giải thích: Trong Tuyên bố hiểu danh sách lồng nhau [x for l in lst for x in l], trước tiên bạn lặp lại tất cả các danh sách trong danh sách danh sách (for l in lst). Sau đó, bạn lặp lại tất cả các yếu tố trong danh sách hiện tại (for x in l). Yếu tố này, bạn chỉ cần đặt trong danh sách bên ngoài, không thay đổi, bằng cách sử dụng nó trong phần biểu thức của Google, một phần của câu lệnh danh sách hiểu

[(0.5391559600830078, 'flatten4b'), # join() above. 
(0.5400412082672119, 'flatten4c'), # Same, with sum(len(b) for b in a) 
(0.5419249534606934, 'flatten4a'), # Similar, using zip() 
(0.7351131439208984, 'flatten1b'), # list(itertools.chain.from_iterable(a)) 
(0.7472689151763916, 'flatten1'), # list(itertools.chain(*a)) 
(1.5468521118164062, 'flatten3'), # [i for j in a for i in j] 
(26.696547985076904, 'flatten2')] # sum(a, [])
5.: In the nested list comprehension statement [x for l in lst for x in l], you first iterate over all lists in the list of lists (for l in lst). Then, you iterate over all elements in the current list (for x in l). This element, you just place in the outer list, unchanged, by using it in the “expression” part of the list comprehension statement
[(0.5391559600830078, 'flatten4b'), # join() above. 
(0.5400412082672119, 'flatten4c'), # Same, with sum(len(b) for b in a) 
(0.5419249534606934, 'flatten4a'), # Similar, using zip() 
(0.7351131439208984, 'flatten1b'), # list(itertools.chain.from_iterable(a)) 
(0.7472689151763916, 'flatten1'), # list(itertools.chain(*a)) 
(1.5468521118164062, 'flatten3'), # [i for j in a for i in j] 
(26.696547985076904, 'flatten2')] # sum(a, [])
5.

Hãy tự mình thử: Bạn có thể tự thực hiện mã này trong Snippet trong vỏ Python tương tác của chúng tôi. Chỉ cần nhấp vào Run Run và kiểm tra đầu ra của mã này.: You can execute this code snippet yourself in our interactive Python shell. Just click “Run” and test the output of this code.

Bài tập: Làm thế nào để làm phẳng danh sách ba chiều (= danh sách danh sách danh sách)? Hãy thử nó trong vỏ!: How to flatten a three-dimensional list (= a list of lists of lists)? Try it in the shell!

Video: Danh sách hiểu biết danh sách Python

Danh sách hiểu biết danh sách Python

Xem video để tìm hiểu ba cách cách áp dụng danh sách hiểu vào danh sách danh sách:

  • để làm phẳng danh sách các danh sách,flatten a list of lists,
  • để tạo một danh sách các danh sách, vàcreate a list of lists, and
  • để lặp lại một danh sách các danh sách.iterate over a list of lists.

Chà, nếu bạn thực sự muốn tìm hiểu cách

[(0.5391559600830078, 'flatten4b'), # join() above. 
(0.5400412082672119, 'flatten4c'), # Same, with sum(len(b) for b in a) 
(0.5419249534606934, 'flatten4a'), # Similar, using zip() 
(0.7351131439208984, 'flatten1b'), # list(itertools.chain.from_iterable(a)) 
(0.7472689151763916, 'flatten1'), # list(itertools.chain(*a)) 
(1.5468521118164062, 'flatten3'), # [i for j in a for i in j] 
(26.696547985076904, 'flatten2')] # sum(a, [])
6 một danh sách trong Python, hãy truy cập hướng dẫn chi tiết này trên blog Finxter.

Đi đâu từ đây?

Đủ lý thuyết. Hãy để có được một số thực hành!

Các lập trình viên được trả tiền sáu con số và hơn thế nữa vì họ có thể giải quyết các vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa.

Để trở nên thành công hơn trong việc mã hóa, giải quyết nhiều vấn đề thực sự hơn cho người thực. Đó là cách bạn đánh bóng các kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, những gì mà việc sử dụng lý thuyết học tập mà không ai cần?

Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế!

Bạn có muốn ngừng học hỏi với các dự án đồ chơi và tập trung vào các dự án mã thực tế kiếm tiền cho bạn và giải quyết các vấn đề thực sự cho mọi người?

Nếu câu trả lời của bạn là có !, Hãy xem xét việc trở thành một nhà phát triển tự do Python! Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện các kỹ năng trăn của bạn, ngay cả khi bạn là người mới bắt đầu hoàn toàn.YES!, consider becoming a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi Làm thế nào để xây dựng kỹ năng thu nhập cao của bạn Python và tìm hiểu cách tôi phát triển kinh doanh mã hóa của mình trực tuyến và làm thế nào bạn có thể, từ sự thoải mái của bạn riêng nhà.

Tham gia hội thảo trên web miễn phí ngay bây giờ!

Lập trình viên hài hước

Hướng dẫn how do i merge a list of lists in python? - làm cách nào để hợp nhất một danh sách các danh sách trong python?
Thật khó để đào tạo các thuật toán học sâu khi hầu hết các phản hồi tích cực mà họ nhận được là mỉa mai. - Từ XKCD

Hướng dẫn how do i merge a list of lists in python? - làm cách nào để hợp nhất một danh sách các danh sách trong python?

Trong khi làm việc như một nhà nghiên cứu trong các hệ thống phân tán, Tiến sĩ Christian Mayer đã tìm thấy tình yêu của mình đối với việc dạy các sinh viên khoa học máy tính.

Để giúp học sinh đạt được thành công cao hơn của Python, ông đã thành lập trang web giáo dục chương trình Finxter.com. Ông là tác giả của cuốn sách lập trình phổ biến Python Oneer (Nostarch 2020), đồng tác giả của loạt sách Break Break Python, những cuốn sách tự xuất bản, người đam mê khoa học máy tính, freelancer và chủ sở hữu của một trong 10 blog Python lớn nhất trên toàn thế giới.

Niềm đam mê của ông là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ tăng cường các kỹ năng của họ. Bạn có thể tham gia học viện email miễn phí của anh ấy ở đây.

Làm thế nào để bạn hợp nhất ba danh sách trong Python?

Sử dụng toán tử + Toán tử + thực hiện một công việc thẳng về phía trước là tham gia các danh sách với nhau.Chúng tôi chỉ áp dụng toán tử giữa tên của danh sách và kết quả cuối cùng được lưu trữ trong danh sách lớn hơn.Trình tự của các yếu tố trong danh sách được bảo tồn. The + operator does a straight forward job of joining the lists together. We just apply the operator between the name of the lists and the final result is stored in the bigger list. The sequence of the elements in the lists are preserved.

Làm thế nào để bạn kết hợp nhiều danh sách trong Python?

Sử dụng python itertools.Phương thức chuỗi ().....
Sử dụng toán tử Python '*'.Toán tử Python '*' cung cấp một cách hiệu quả để thực hiện thao tác trên các danh sách đầu vào và kết hợp chúng với nhau.....
Sử dụng toán tử Python,++.Toán tử Python '+' có thể được sử dụng để kết hợp các danh sách với nhau ..