Python so sánh 2 danh sách

Danh sách giữ nguyên thứ tự của các phần tử trong danh sách. Khi bạn so sánh hai danh sách bằng toán tử ==, nó trả về True nếu tất cả các phần tử trong danh sách đều giống nhau và theo cùng một thứ tự

Nội dung chính Hiển thị

list_a = [2, 4, 6, 8] list_b = [2, 4, 6, 8] print[list_a==list_b]

đầu ra

ĐÚNG VẬY

Nếu bạn thay đổi thứ tự của các phần tử trong bất kỳ danh sách nào và sau đó so sánh nó với phần tử khác, nó sẽ trả về Sai

list_a = [2, 4, 6, 8] list_b = [2, 8, 6, 4] print[list_a==list_b]

đầu ra

Sai

Bây giờ chúng tôi muốn so sánh hai danh sách bất kể thứ tự của chúng

So sánh hai danh sách trong Python

Mục lục

  • 1. Sử dụng toán tử thành viên
  • 2. Sử dụng phương pháp Set
  • 3. Sử dụng phương pháp sắp xếp
  • 4. Trả lại các phần tử không khớp với vòng lặp For
  • 5. Sự khác biệt giữa hai danh sách
  • 6. Hàm Lambda để trả về tất cả các phần tử chưa khớp

1. Sử dụng toán tử thành viên

Chúng ta có thể so sánh danh sách bằng cách kiểm tra xem mỗi phần tử trong danh sách này có trong danh sách khác không

def is_identical[list_a, list_b]. nếu len[list_a]. = len[list_b]. trả về Sai cho tôi trong list_a. nếu tôi không có trong list_b. return Sai return True list_a = [2, 4, 6, 8] list_b = [2, 8, 6, 4] if is_identical[list_a, list_b]. print["Hai danh sách giống nhau. "] khác. print["Hai danh sách khác nhau. "]

đầu ra

Hai danh sách giống hệt nhau

Bạn có thể đọc thêm về danh sách Python và các phương thức khác nhau của nó

Đây là một công việc tẻ nhạt vì chúng ta phải duyệt qua danh sách đầy đủ

Bạn phải lấy một phần tử từ danh sách A và cần tìm kiếm xem phần tử đó có trong danh sách B không

Vì danh sách không được sắp xếp theo mặc định, đối với mỗi phần tử, sẽ mất O[n] thời gian để tìm kiếm phần tử trong danh sách khác

Vì vậy, tổng độ phức tạp sẽ là O[n^2]

Điều này tốt cho việc học và chắc chắn không phải là cách viết mã Python tiêu chuẩn

Chúng ta có thể tối ưu hóa vấn đề này không?

Về cơ bản, chúng ta cần tìm ra giải pháp để giải quyết vấn đề này mà không cần duyệt qua danh sách đầy đủ

Có cách để làm điều này. Chúng ta có thể sử dụng các hàm sẵn có của Python để so sánh hai danh sách

Hãy xem nào

2. Sử dụng phương pháp Set

Để so sánh hai danh sách, chúng tôi đang sử dụng phương thức set

  • Nếu độ dài của hai danh sách khác nhau, danh sách không thể giống nhau và trả về Sai
  • Khác, Chuyển đổi cả hai danh sách thành bộ
  • So sánh hai bộ này. Nếu các tập hợp bằng nhau, hai danh sách đã cho giống nhau. Mặt khác, hai danh sách là khác nhau

def is_identical[list_a, list_b]. nếu len[list_a]. = len[list_b]. trả về Sai nếu set[list_a] == set[list_b]. trở lại Đúng khác. trả về Sai list_a = [2, 4, 6, 8] list_b = [2, 8, 6, 4] if is_identical[list_a, list_b]. print["Hai danh sách giống nhau. "] khác. print["Hai danh sách khác nhau. "]

đầu ra

Hai danh sách giống hệt nhau

Nhược điểm của việc sử dụng phương thức set[]

Phương thức set[] loại bỏ tất cả các phần tử trùng lặp trong danh sách. Nếu danh sách của bạn chứa các phần tử trùng lặp, giải pháp này sẽ không phù hợp với bạn

Hãy xem cách bạn có thể loại bỏ vấn đề này để so sánh hai danh sách trong Python

3. Sử dụng phương pháp sắp xếp

Chúng ta có thể sắp xếp hai danh sách đã cho và sau đó so sánh

Chúng ta đã tìm hiểu về hai cách sắp xếp danh sách Python trong hướng dẫn trước. Hãy sử dụng điều đó để tìm xem hai danh sách có giống nhau không

list_a = [2, 4, 6, 6] list b = [2, 6, 4, 6] phòng thủ giống hệt nhau [list_a, list_a]. danh sách_a. sắp xếp [] danh sách_b. sort[] trả về list_a == list_b nếu is_identical[list_a, list_b]. print["Hai danh sách giống nhau. "] khác. print["Hai danh sách khác nhau. "]

đầu ra

Hai danh sách giống hệt nhau

Giải pháp này sẽ hoạt động ngay cả khi danh sách có các phần tử trùng lặp

Bây giờ, chúng tôi đang tăng phạm vi của vấn đề của chúng tôi. Thay vì kiểm tra xem hai danh sách có giống nhau hay không, chúng tôi cũng muốn tìm các phần tử không khớp trong danh sách

4. Trả lại các phần tử không khớp với vòng lặp For

Bạn có thể viết một hàm để trả về tất cả các phần tử chưa khớp trong danh sách bằng cách sử dụng vòng lặp for

def non_match_elements[list_a, list_a]. non_match = [] cho tôi trong list_a. nếu tôi không có trong list_b. non_match. append[i] return non_match list_a = [2, 4, 6, 8, 10, 12] list_b = [2, 4, 6, 8] non_match = non_match_elements[list_a, list_b] print["Không có phần tử nào khớp. ", non_match]

đầu ra

Không có yếu tố phù hợp. [10, 12]

Thay vì chỉ vòng lặp for, bạn có thể sử dụng các cơ chế lặp khác trong Python

Bạn cũng có thể sửa đổi đoạn mã trên để trả về chỉ mục của các phần tử không khớp trong danh sách

5. Sự khác biệt giữa hai danh sách

Chúng ta có thể thực hiện phép toán trừ trên tập hợp để tìm các phần tử thừa trong danh sách này từ danh sách khác

def get_difference[list_a, list_b]. return set[list_a]-set[list_b] list_a = [2, 4, 6, 8, 10, 12] list_b = [2, 4, 6, 8] non_match = list[get_difference[list_a, list_b]] print[" . ", non_match]

đầu ra

Không có yếu tố phù hợp. [10, 12]

Bây giờ, hãy tìm các phần tử chưa khớp từ cả hai danh sách

def get_difference[list_a, list_b]. non_match_a = set[list_a]-set[list_b] non_match_b = set[list_b]-set[list_a] non_match = list[non_match_a] + list[non_match_b] return non_match list_a = [2, 4, 6, 8, 10, 12] . ", non_match]

đầu ra

Các yếu tố không phù hợp. [9, 13, 10, 12]

Điều này sẽ cung cấp cho bạn tất cả các yếu tố chưa từng có từ cả hai danh sách

Hãy làm cho nó thú vị hơn với một số khái niệm nâng cao về Python

6. Hàm Lambda để trả về tất cả các phần tử chưa khớp

Chúng ta có thể viết lại hàm thông thường ở trên bằng hàm lambda để lấy tất cả các phần tử không khớp trong danh sách

l_func = lambda x, y. list[[set[x]- set[y]]] + list[[set[y]- set[x]]] list_a = [2, 4, 6, 8, 10, 12] list_b = [2, 4 . ", non_match]

đầu ra

Các yếu tố không phù hợp. [10, 12, 9, 13]

Python rất thú vị và bạn có thể tìm thấy nhiều cách để so sánh hai danh sách

Trường hợp sử dụng

Tôi đang làm việc trên một trong những dự án mà tôi đang gọi REST API. Sau khi nhận được API REST của biểu mẫu phản hồi web, tôi phải xác thực tất cả các trường tiêu đề HTTP xem có tất cả các thuộc tính bắt buộc hay không

Cách dễ nhất là giữ danh sách tất cả các thuộc tính dự kiến ​​và sau đó so sánh nó với danh sách các thuộc tính nhận được từ phản hồi API REST. Nếu hai danh sách không giống nhau, thông qua lỗi thông báo thiếu thuộc tính

Tương tự, bạn có thể tìm thấy nhiều trường hợp sử dụng khác mà bạn cần so sánh hai hoặc nhiều danh sách Python để tìm các phần tử chưa khớp

Danh sách khác Hướng dẫn thực hành liên quan

  • Kiểm tra xem tất cả các phần tử trong danh sách có giống nhau không
  • Tìm tổng của tất cả các phần tử trong danh sách
  • Sắp xếp danh sách các bộ dữ liệu trong Python

Trong hướng dẫn này, chúng ta đã học các phương pháp khác nhau để so sánh hai danh sách trong Python và trả về các phần tử không khớp. Nếu bạn có bất kỳ nghi ngờ nào hoặc nếu bạn biết bất kỳ cách nào khác để so sánh hai danh sách, hãy chia sẻ nó với tôi trong phần nhận xét

Chủ Đề