Hướng dẫn flatten mixed list python - làm phẳng danh sách hỗn hợp python

Tôi có một danh sách hỗn hợp trông như thế này:

[('1CFV',), 'NONRBP', [0.00325071141379, 0.278046326931, 0.291350892759]]

Nó được tạo bằng lệnh này:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl

Có cách nào để chuyển đổi nó thành:

   ['1CFV', 'NONRBP', 0.00325071141379, 0.278046326931, 0.291350892759]

Tôi đã thử điều này, nhưng nó đã làm phẳng ngay cả chuỗi 'nonrbp' không phải là thứ tôi muốn:

 [item for sublist in mixl for item in sublist]

Đố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):

Nội phân Chính showShow

  • Tại sao chúng ta cần tham gia một danh sách các danh sách vào danh sách
  • Tham gia một danh sách các danh sách vào danh sách bằng cách sử dụng vòng lặp trong Python
  • Tham gia danh sách các danh sách vào danh sách bằng cách sử dụng danh sách hiểu
  • Tham gia một danh sách các danh sách vào một danh sách bằng cách sử dụng đệ quy trong Python
  • Tham gia một danh sách các danh sách vào danh sách bằng cách sử dụng các chức năng Python được xây dựng
  • Tham gia danh sách các danh sách bằng hàm sum ()
  • Tham gia một danh sách các danh sách sử dụng chức năng Lambda
  • Tham gia danh sách các danh sách vào danh sách bằng phương thức chuỗi ()
  • Tham gia danh sách các danh sách vào danh sách bằng mô -đun Numpy
  • Bài viết liên quan - Danh sách Python
  • Làm thế nào để bạn tham gia một danh sách các danh sách trong Python?
  • Làm cách nào để hợp nhất một danh sách vào một danh sách khác trong Python?
  • Làm cách nào để đặt nhiều danh sách vào một danh sách?
  • Làm cách nào để lập danh sách trong một danh sách trong Python?

Có một số cách để làm phẳng một danh sách các danh sách trong Python. Bạn có thể sử dụng khả năng hiểu danh sách, thư viện ITERTOOLS hoặc đơn giản là lặp qua danh sách các danh sách thêm từng mục vào một danh sách riêng, v.v. Hãy xem chúng hoạt động thông qua các ví dụ theo sau là đánh giá thời gian chạy của từng mục.

  • Tại sao chúng ta cần tham gia một danh sách các danh sách vào danh sách
  • Tham gia một danh sách các danh sách vào danh sách bằng cách sử dụng vòng lặp trong Python
  • Tham gia danh sách các danh sách vào danh sách bằng cách sử dụng danh sách hiểu
  • Tham gia một danh sách các danh sách vào một danh sách bằng cách sử dụng đệ quy trong Python
  • Tham gia một danh sách các danh sách vào danh sách bằng cách sử dụng các chức năng Python được xây dựng
  • Tham gia danh sách các danh sách bằng hàm sum ()
  • Tham gia một danh sách các danh sách sử dụng chức năng Lambda
  • Tham gia danh sách các danh sách vào danh sách bằng phương thức chuỗi ()
  • Tham gia danh sách các danh sách vào danh sách bằng mô -đun Numpy
  • Bài viết liên quan - Danh sách Python
  • Làm thế nào để bạn tham gia một danh sách các danh sách trong Python?
  • Làm cách nào để hợp nhất một danh sách vào một danh sách khác trong Python?
  • Làm cách nào để đặt nhiều danh sách vào một danh sách?
  • Làm cách nào để lập danh sách trong một danh sách trong Python?
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

Có một số cách để làm phẳng một danh sách các danh sách trong Python. Bạn có thể sử dụng khả năng hiểu danh sách, thư viện ITERTOOLS hoặc đơn giản là lặp qua danh sách các danh sách thêm từng mục vào một danh sách riêng, v.v. Hãy xem chúng hoạt động thông qua các ví dụ theo sau là đánh giá thời gian chạy của từng mục.

[(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, [])
  1. Đố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):
  2. Nội phân Chính show
  3. Tại sao chúng ta cần tham gia một danh sách các danh sách vào danh sách

Tham gia một danh sách các danh sách vào danh sách bằng cách sử dụng vòng lặp trong Python

  1. Tại sao chúng ta cần tham gia một danh sách các danh sách vào danh sách
  2. Tham gia một danh sách các danh sách vào danh sách bằng cách sử dụng vòng lặp trong Python
  3. Tham gia danh sách các danh sách vào danh sách bằng cách sử dụng danh sách hiểu
  4. Tham gia một danh sách các danh sách vào một danh sách bằng cách sử dụng đệ quy trong Python
  5. Tham gia một danh sách các danh sách vào danh sách bằng cách sử dụng các chức năng Python được xây dựng
  6. Tham gia danh sách các danh sách bằng hàm sum ()
  7. Tham gia một danh sách các danh sách sử dụng chức năng Lambda
  8. Tham gia danh sách các danh sách vào danh sách bằng mô -đun Numpy

Tham gia danh sách các danh sách vào danh sách bằng phương thức chuỗi ()

Tại sao chúng ta cần tham gia một danh sách các danh sách vào danh sách

Một danh sách các danh sách là định dạng 2 chiều, còn được gọi là danh sách lồng nhau, chứa một số danh sách phụ. Danh sách là một trong những cấu trúc dữ liệu linh hoạt nhất trong Python, vì vậy việc tham gia một danh sách các danh sách vào một danh sách 1-D có thể có lợi.

Ở đây, chúng tôi sẽ chuyển đổi danh sách danh sách này thành một cấu trúc số ít nơi danh sách mới sẽ bao gồm các yếu tố có trong mỗi danh sách phụ từ danh sách danh sách. Trong ngôn ngữ Python, quá trình này còn được gọi là làm phẳng.

Danh sách 1-D chứa tất cả các yếu tố là một cách tiếp cận tốt hơn như:

  1. Nó làm cho mã rõ ràng và có thể đọc được cho tài liệu tốt hơn vì nó dễ đọc từ một cấu trúc duy nhất so với một cấu trúc 2-D.
  2. Danh sách 1-D rất hữu ích trong các ứng dụng khoa học dữ liệu như bạn có thể đọc, lọc hoặc xóa các mục khỏi danh sách một cách nhanh chóng.
  3. Một danh sách cũng được ưa thích khi bạn muốn lọc dữ liệu dựa trên lý thuyết đặt.

Tham gia một danh sách các danh sách vào danh sách bằng cách sử dụng vòng lặp trong Python

Phương pháp dễ nhất để chuyển đổi danh sách các danh sách thành danh sách 1-D là triển khai một vòng lặp lồng nhau với điều kiện IF cho các yếu tố riêng biệt có mặt. Bạn có thể làm điều này bằng cách:

Listoflists = [[100,90,80],[70,60],[50,40,30,20,10]] #List of Lists

mylist = [] #new list

for a in range(len(Listoflists)): #List of lists level
    for b in range (len(Listoflists[a])): #Sublist Level
        mylist.append(Listoflists[a][b]) #Add element to mylist

print("List of Lists:",Listoflists)
print("1-D List:",mylist)

Output:

List of Lists: [[100, 90, 80], [70, 60], [50, 40, 30, 20, 10]]
1-D List: [100, 90, 80, 70, 60, 50, 40, 30, 20, 10]

Trong đoạn mã trên, chúng tôi sử dụng lồng nhau cho các vòng lặp. Vòng lặp đầu tiên chọn từng phần tử trong danh sách chính và kiểm tra xem đó có phải là loại danh sách không.

Nếu phần tử phụ là một danh sách, nó sẽ khởi tạo một vòng lặp ____22 khác để lặp lại danh sách phụ này và thêm các giá trị của nó vào danh sách mới. Mặt khác, nó nối các phần tử duy nhất được tìm thấy tại vị trí đó.

Sử dụng vòng lặp

   ['1CFV', 'NONRBP', 0.00325071141379, 0.278046326931, 0.291350892759]
2 lồng nhau hoạt động với một danh sách danh sách thường xuyên và không đều nhưng là một cách tiếp cận vũ lực.

Tham gia danh sách các danh sách vào danh sách bằng cách sử dụng danh sách hiểu

Một phương pháp khác để chuyển đổi một danh sách lồng nhau thành một danh sách duy nhất là sử dụng danh sách hiểu. Danh sách hiểu biết cung cấp một dòng mã sạch dễ hiểu để tạo danh sách hoàn toàn mới bằng các cấu trúc khác như chuỗi, mảng, danh sách lồng nhau, v.v.

Hãy cho chúng tôi xem cách bạn có thể sử dụng danh sách hiểu để giải quyết vấn đề của chúng tôi:

listoflists = [["Sahildeep", "Dhruvdeep"], [14.12,8.6,14.01], [100,100]]

#mylist defined using list comprehension
mylist = [item for sublist in listoflists for item in sublist]

print('List of Lists', listoflists)
print('1-D list', mylist)

Output:

List of Lists [['Sahildeep', 'Dhruvdeep'], [14.12, 8.6, 14.01], [100, 100]]
1-D list ['Sahildeep', 'Dhruvdeep', 14.12, 8.6, 14.01, 100, 100]

Trong đoạn mã trên, chúng tôi chỉ định việc tạo một danh sách mới với các phần tử được cung cấp bởi từng mục của từng danh sách phụ được tìm thấy trong danh sách ban đầu của chúng tôi. Bạn cũng có thể kết hợp các danh sách phụ chứa các yếu tố các loại dữ liệu khác nhau vào danh sách 1-D của bạn.

Tham gia một danh sách các danh sách vào một danh sách bằng cách sử dụng đệ quy trong Python

Recursion cung cấp một cách khác để làm phẳng danh sách các danh sách trong Python. Hãy cho chúng tôi xem cách bạn có thể triển khai đệ quy để tạo một danh sách duy nhất từ ​​danh sách danh sách:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl
0

Output:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl
1

Trong đoạn mã trên, chúng tôi đã xác định một hàm đệ quy có tên

   ['1CFV', 'NONRBP', 0.00325071141379, 0.278046326931, 0.291350892759]
6 lấy danh sách các danh sách,
   ['1CFV', 'NONRBP', 0.00325071141379, 0.278046326931, 0.291350892759]
7 là tham số của nó. Nếu danh sách danh sách chứa một phần tử duy nhất, nó sẽ được trả về như vậy.

Mặt khác, một câu lệnh IF có

   ['1CFV', 'NONRBP', 0.00325071141379, 0.278046326931, 0.291350892759]
8 được sử dụng để kiểm tra xem danh sách tại vị trí 0 của danh sách danh sách của chúng tôi là một danh sách.

Nếu đó là sự thật, thì chúng ta sẽ trả về các giá trị của danh sách phụ tại [0] và gọi hàm của chúng ta,

   ['1CFV', 'NONRBP', 0.00325071141379, 0.278046326931, 0.291350892759]
6 một lần nữa như một lập luận.

Bây giờ chúng tôi hãy xem làm thế nào để tham gia danh sách lồng nhau vào một danh sách bằng cách sử dụng các chức năng được xây dựng.

Tham gia một danh sách các danh sách vào danh sách bằng cách sử dụng các chức năng Python được xây dựng

Chúng ta có thể sử dụng hàm sum () và các hàm lambda để tham gia một danh sách các danh sách trong Python.

Tham gia danh sách các danh sách bằng hàm sum ()

Bạn có thể sử dụng hàm tổng được xây dựng để tạo danh sách 1-D từ danh sách danh sách.

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl
2

Output:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl
3

Trong chương trình trên, hàm tổng được truyền với hai tham số; Đầu tiên là danh sách các danh sách mà nó sẽ lặp lại và lần thứ hai là bắt đầu danh sách 1-D của chúng tôi ban đầu trống.

Tham gia một danh sách các danh sách sử dụng chức năng Lambda

Bạn cũng có thể sử dụng Lambda, tức là, một hàm ẩn danh, để chuyển đổi danh sách các danh sách thành một danh sách. Hãy cho chúng tôi xem với một ví dụ về mã:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl
4

Output:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl
5

Trong chương trình trên, chúng tôi xác định hàm lambda đã lặp lại từng phần tử của một mục, tức là, một danh sách phụ trong danh sách danh sách và thêm phần tử đó vào danh sách đơn bằng cách sử dụng

 [item for sublist in mixl for item in sublist]
0.

Hãy cho chúng tôi xem cách bạn có thể chuyển đổi danh sách danh sách thành danh sách 1-D bằng các thư viện Python.

Một trong những cách nhanh nhất mà bạn có thể sử dụng để chuyển đổi danh sách 2-D thành danh sách 1-D trong Python là bằng cách sử dụng mô-đun functools của nó, cung cấp các chức năng để hoạt động hiệu quả với các chức năng cao hơn hoặc phức tạp.

Chúng ta có thể sử dụng chức năng

 [item for sublist in mixl for item in sublist]
1 được cung cấp trong mô -đun functools để tham gia danh sách danh sách vào danh sách, như được hiển thị trong mã bên dưới:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl
6

Output:

List of Lists [['Sahildeep', 'Dhruvdeep'], [14.12, 8.6, 14.01], [100, 100]]
1-D list ['Sahildeep', 'Dhruvdeep', 14.12, 8.6, 14.01, 100, 100]

Trong đoạn mã trên, danh sách 1-D mới được xác định với hàm

 [item for sublist in mixl for item in sublist]
1 sử dụng hàm
 [item for sublist in mixl for item in sublist]
3 để kết hợp tất cả các yếu tố từ danh sách phụ của danh sách danh sách của chúng tôi chuyển từ trái sang phải.

Tốt nhất là nên nhớ thêm nhập khẩu cho

 [item for sublist in mixl for item in sublist]
4 và
 [item for sublist in mixl for item in sublist]
5 vì phương pháp này yêu cầu cả hai.

Tham gia danh sách các danh sách vào danh sách bằng phương thức chuỗi ()

Một thư viện Python khác, được gọi là

 [item for sublist in mixl for item in sublist]
6, chứa phương thức
 [item for sublist in mixl for item in sublist]
7 mà bạn có thể sử dụng để chuyển đổi danh sách danh sách thành danh sách 1-D. Hãy cho chúng tôi xem làm thế nào:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl
8

Output:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl
9

Trong chương trình trên, phương thức

 [item for sublist in mixl for item in sublist]
7 được sử dụng để lặp lại tất cả các danh sách phụ trong danh sách danh sách và trả về một danh sách có thể lặp lại duy nhất chứa tất cả các yếu tố của tất cả các danh sách phụ.

Tham gia danh sách các danh sách vào danh sách bằng mô -đun Numpy

Thư viện Numpy cung cấp các chức năng để kết hợp chuỗi con và làm phẳng chúng vào một danh sách 1-D duy nhất. Chúng ta hãy xem cách bạn có thể chuyển đổi danh sách lồng nhau thành danh sách bằng phương thức

 [item for sublist in mixl for item in sublist]
9.

   ['1CFV', 'NONRBP', 0.00325071141379, 0.278046326931, 0.291350892759]
0

Output:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl
3

Trong đoạn mã trên, chúng tôi đã sử dụng danh sách danh sách của mình, giống như các chương trình trên và tạo một danh sách mới có tên

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
0 bằng các hàm ________ 41
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
2 và
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
3.

Bài viết liên quan - Danh sách Python

  • Chuyển đổi từ điển thành danh sách trong Python
  • Xóa tất cả các lần xuất hiện của một phần tử khỏi danh sách trong Python
  • Xóa các bản sao khỏi danh sách trong Python
  • Nhận trung bình của một danh sách trong Python
  • Làm thế nào để bạn tham gia một danh sách các danh sách trong Python?

    Để tham gia một danh sách các danh sách trong Python:..

    Khai báo một biến mới và đặt nó thành một danh sách trống ..

    Sử dụng một vòng lặp để lặp qua danh sách hai chiều ..

    Sử dụng một vòng lặp cho vòng lặp để lặp qua mỗi danh sách lồng nhau ..

    Nối từng mục vào danh sách trống ..

    Làm cách nào để hợp nhất một danh sách vào một danh sách khác trong Python?

    Trong Python, chúng ta có thể sử dụng toán tử + để hợp nhất nội dung của hai danh sách thành một danh sách mới. Ví dụ: chúng ta có thể sử dụng toán tử + để hợp nhất hai danh sách, tức là nó đã trả về một danh sách được nối mới, chứa nội dung của cả List_1 và List_2.use the + operator to merge the contents of two lists into a new list. For example, We can use + operator to merge two lists i.e. It returned a new concatenated lists, which contains the contents of both list_1 and list_2.

    Làm cách nào để đặt nhiều danh sách vào một danh sách?

    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 cách nào để lập danh sách trong một danh sách trong Python?

    Có một số cách để làm phẳng một danh sách các danh sách trong Python. Bạn có thể sử dụng khả năng hiểu danh sách, thư viện ITERTOOLS hoặc đơn giản là lặp qua danh sách các danh sách thêm từng mục vào một danh sách riêng, v.v. Hãy xem chúng hoạt động thông qua các ví dụ theo sau là đánh giá thời gian chạy của từng mục.use a list comprehension, the itertools library, or simply loop through the list of lists adding each item to a separate list, etc. Let's see them in action through examples followed by a runtime assessment of each.