Kết hợp hai danh sách python zip

Hàm zip lặp song song qua một số lần lặp và tạo các bộ dữ liệu với một mục từ mỗi lần lặp

Hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
5 trả về một bộ lặp gồm các bộ

Mục đầu tiên trong mỗi bộ dữ liệu được lấy từ danh sách đầu tiên và mục thứ hai được lấy từ danh sách thứ hai

Bạn có thể sử dụng phương pháp này để kết hợp nhiều hơn hai danh sách thành một danh sách các bộ

Bước cuối cùng là sử dụng lớp

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
6 để chuyển đổi đối tượng
>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
5 thành danh sách

Ngoài ra, bạn có thể sử dụng hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
8

Hợp nhất hai danh sách thành một Danh sách các Bộ bằng cách sử dụng map() #

Để hợp nhất hai danh sách thành một danh sách các bộ

  1. Truyền hàm lambda và hai danh sách cho hàm
    >>> for item in zip(first_names, middle_initials, surnames):
    ..     print(item)
    ...
    ('Joe', 'A', 'Bloggs')
    ('Jane', 'B', 'Doe')
    ('Mark', 'C', 'Smith')
    8
  2. Hàm lambda sẽ trả về một bộ chứa hai phần tử danh sách
  3. Sử dụng lớp
    >>> for item in zip(first_names, middle_initials, surnames):
    ..     print(item)
    ...
    ('Joe', 'A', 'Bloggs')
    ('Jane', 'B', 'Doe')
    ('Mark', 'C', 'Smith')
    6 để chuyển đổi đối tượng
    >>> for item in zip(first_names, middle_initials, surnames):
    ..     print(item)
    ...
    ('Joe', 'A', 'Bloggs')
    ('Jane', 'B', 'Doe')
    ('Mark', 'C', 'Smith')
    50 thành danh sách các bộ dữ liệu

Hàm map() nhận một hàm và một hoặc nhiều lần lặp làm đối số và gọi hàm với các đối số từ mỗi lần lặp

Hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
50 trả về một đối tượng
>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
50, vì vậy chúng ta phải sử dụng lớp
>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
6 để chuyển đổi kết quả thành một danh sách

Ngoài ra, bạn có thể sử dụng cách hiểu danh sách

Hợp nhất hai danh sách thành một Danh sách các bộ bằng cách sử dụng tính năng hiểu danh sách() #

Để hợp nhất hai danh sách thành một danh sách các bộ

  1. Sử dụng khả năng hiểu danh sách để lặp lại đối tượng
    >>> for item in zip(first_names, middle_initials, surnames):
    ..     print(item)
    ...
    ('Joe', 'A', 'Bloggs')
    ('Jane', 'B', 'Doe')
    ('Mark', 'C', 'Smith')
    54 với độ dài của danh sách
  2. Trên mỗi lần lặp lại, trả về một bộ chứa các mục tương ứng từ danh sách thứ nhất và thứ hai

Chúng tôi đã sử dụng lớp

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
55 để lấy một đối tượng phạm vi có độ dài của danh sách

Lớp phạm vi thường được sử dụng để lặp một số lần cụ thể

Chúng tôi đã sử dụng cách hiểu danh sách để lặp lại đối tượng

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
54

Khả năng hiểu danh sách được sử dụng để thực hiện một số thao tác cho mọi phần tử hoặc chọn một tập hợp con các phần tử đáp ứng một điều kiện

Trên mỗi lần lặp, chúng tôi truy cập hai danh sách tại chỉ mục hiện tại và trả về một bộ chứa kết quả

Ngoài ra, bạn có thể sử dụng vòng lặp

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
57

Hợp nhất hai danh sách thành một Danh sách các Bộ bằng cách sử dụng vòng lặp for #

Để hợp nhất hai danh sách thành một danh sách các bộ

  1. Sử dụng vòng lặp
    >>> for item in zip(first_names, middle_initials, surnames):
    ..     print(item)
    ...
    ('Joe', 'A', 'Bloggs')
    ('Jane', 'B', 'Doe')
    ('Mark', 'C', 'Smith')
    57 để lặp qua đối tượng
    >>> for item in zip(first_names, middle_initials, surnames):
    ..     print(item)
    ...
    ('Joe', 'A', 'Bloggs')
    ('Jane', 'B', 'Doe')
    ('Mark', 'C', 'Smith')
    54 với độ dài của danh sách
  2. Trên mỗi lần lặp, xây dựng một bộ chứa các mục tương ứng từ hai danh sách
  3. Nối từng bộ dữ liệu vào một danh sách mới

Chúng tôi đã sử dụng vòng lặp

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
57 để lặp lại danh sách

Trên mỗi lần lặp, chúng tôi xây dựng một bộ chứa các mục từ hai danh sách dựa trên chỉ mục hiện tại

Chúng tôi đã sử dụng phương pháp

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
61 để nối từng bộ dữ liệu vào một danh sách mới

Bạn chọn cách tiếp cận nào là vấn đề sở thích cá nhân. Tôi sẽ sử dụng hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3 vì tôi thấy nó khá trực tiếp và trực quan

Làm cách nào để nén hai danh sách lại với nhau trong Python?

Hàm tích hợp sẵn

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3 cho phép người dùng kết hợp các lần lặp, chẳng hạn như danh sách, thành các bộ dữ liệu bằng cách lấy từng mục tương ứng từ danh sách được truyền vào tham số của nó, hợp nhất các danh sách thành một. Không quan trọng bạn có hai hay nhiều danh sách, chức năng là các tham số danh sách giống nhau

Ví dụ: giả sử bạn có các danh sách sau và bạn muốn kết hợp tất cả chúng lại với nhau

>>> first_names = ["Joe", "Jane", "Mark"]
>>> middle_initials = ["A", "B", "C"]
>>> surnames = ["Bloggs", "Doe", "Smith"]
>>> zip(first_names, middle_initials, surnames)

Như bạn có thể thấy kết quả từ hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3 như được hiển thị trong đầu ra REPL ở trên là một đối tượng
>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
0. Bạn có thể kiểm tra từng phần tử trong đối tượng bằng cách in nó, vì vậy thay vì chỉ xuất kết quả, hãy chạy nó qua một vòng lặp for, có lẽ đại loại như

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')

Nếu bạn muốn bọc kết quả của các bộ vào một danh sách, bạn có thể bọc hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3 thành hàm
>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
2 như vậy

>>> first_names = ["Joe", "Jane", "Mark"]
>>> middle_initials = ["A", "B", "C"]
>>> surnames = ["Bloggs", "Doe", "Smith"]
>>> list(zip(first_names, middle_initials, surnames))
[('Joe', 'A', 'Bloggs'), ('Jane', 'B', 'Doe'), ('Mark', 'C', 'Smith')]

Như bạn có thể thấy từ kết quả trên, đầu ra hiện đã đẹp và được nhập gọn gàng vào danh sách có thể được tham chiếu thêm trong mã của bạn

Mặc dù các danh sách này đã được tách ra thành các danh sách riêng của chúng, nhưng nếu danh sách ban đầu là danh sách lồng nhau hai chiều thì sao?

Làm thế nào để bạn nén một danh sách hai chiều trong Python?

Bạn có thể nén tất cả các danh sách trong danh sách hai chiều bằng hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3 không?

Giả sử bạn có cùng loại dữ liệu nhưng danh sách là hai chiều và có cấu trúc như vậy

>>> my_list = [["Joe", "Jane", "Mark"],
..            ["A", "B", "C"],
..            ["Bloggs", "Doe", "Smith"]]

Nếu bạn nén danh sách hai chiều này, nó sẽ chỉ tạo ra một danh sách các bộ cho mỗi hàng

>>> list(zip(my_list))
[(['Joe', 'Jane', 'Mark'],), (['A', 'B', 'C'],), (['Bloggs', 'Doe', 'Smith'],)]

Làm cách nào bạn có thể tạo ra kết quả giống như tôi đã làm ở trên khi mỗi danh sách được chứa trong biến riêng của nó?

Cách bạn có thể chia nhỏ danh sách hai chiều là áp dụng toán tử

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
4 cho biến – toán tử này giải nén nội dung của biến, đây là minh họa đơn giản cho thao tác này

________số 8

Như bạn có thể thấy từ đầu ra ở trên khi in nội dung của danh sách và sử dụng tham số

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
5 (dấu phân cách) (được đặt thành dấu phân cách dòng mới
>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
6) để tách từng mục được giải nén khỏi
>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
4 (toán tử dấu hoa thị) Tôi nhận được từng hàng riêng lẻ

Việc biết toán tử tiện dụng này và cách nó có thể giúp giải nén từng hàng trong danh sách hai chiều ban đầu sẽ giúp làm cho mỗi hàng hoạt động giống như hàng được chèn riêng lẻ của chính nó vào hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3

Thử dùng hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3 sẽ giống như thế này

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
2

Như bạn có thể thấy từ đoạn mã trên, bạn có thể đạt được kết quả chính xác như bình thường bằng cách chuyển từng hàng riêng lẻ vào hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3

Bạn có thể nén các danh sách không có cùng kích thước không?

Làm cách nào để bạn xử lý việc nén hai hoặc nhiều danh sách trong đó nội dung của một danh sách hoặc tất cả các danh sách không có cùng độ dài?

Nếu bạn có các danh sách có độ dài khác nhau và bạn cố nén tất cả chúng bằng cách sử dụng hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3, bạn sẽ nhận được độ dài nhỏ nhất từ ​​việc kết hợp tất cả các phần tử trong danh sách lại với nhau

Ví dụ: nếu tôi sử dụng các biến giống như trước, nhưng loại bỏ phần tử cuối cùng trong danh sách

>>> first_names = ["Joe", "Jane", "Mark"]
>>> middle_initials = ["A", "B", "C"]
>>> surnames = ["Bloggs", "Doe", "Smith"]
>>> list(zip(first_names, middle_initials, surnames))
[('Joe', 'A', 'Bloggs'), ('Jane', 'B', 'Doe'), ('Mark', 'C', 'Smith')]
2 thì đầu ra sẽ chỉ là phần tử thứ nhất và thứ hai được kết hợp với nhau, như được thấy ở đây

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
4

Do đó, bạn cần lưu ý đến nội dung trong danh sách của mình khi nén chúng lên – nếu nội dung của một danh sách ngắn hơn phần còn lại thì kết quả sẽ là độ dài của danh sách ngắn hơn

Bản tóm tắt

Python cho phép bạn nén hai hoặc nhiều danh sách thành một bằng cách sử dụng hàm tiện dụng

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3

Một cách dễ dàng để nén các danh sách hai chiều là sử dụng toán tử dấu hoa thị để giải nén từng danh sách riêng lẻ trong danh sách hai chiều ban đầu và cho phép hàm

>>> for item in zip(first_names, middle_initials, surnames):
..     print(item)
...
('Joe', 'A', 'Bloggs')
('Jane', 'B', 'Doe')
('Mark', 'C', 'Smith')
3 hoạt động trên từng danh sách như thể được chuyển qua dưới dạng các tham số riêng lẻ cho

Tôi có thể nén 3 danh sách bằng Python không?

Hàm zip() của Python cũng giúp dễ dàng nén nhiều hơn hai danh sách . Điều này hoạt động chính xác như bạn mong đợi, nghĩa là bạn chỉ cần chuyển các danh sách dưới dạng các đối số khác nhau. Cái này là cái gì? .

Chúng ta có thể kết hợp hai danh sách trong Python không?

Phương thức expand() của Python có thể được sử dụng để nối hai danh sách trong Python . Hàm extend() thực hiện lặp qua tham số đã truyền và do đó thêm mục vào danh sách, mở rộng danh sách theo kiểu tuyến tính. Tất cả các phần tử của list2 được thêm vào list1 và do đó list1 được cập nhật và cho kết quả là đầu ra.