Danh sách trong python là tập hợp các mục tương tự. Đôi khi, chúng tôi có thể cần so sánh các mục dữ liệu trong hai danh sách để thực hiện một số thao tác nhất định. Chúng tôi sẽ thảo luận về một số phương pháp để so sánh hai danh sách trong python
Sử dụng danh sách. toán tử sort[] và ==
Danh sách. Phương thức sort[] sắp xếp hai danh sách và toán tử == so sánh hai danh sách theo từng mục, nghĩa là chúng có các mục dữ liệu bằng nhau ở các vị trí bằng nhau. Điều này kiểm tra xem danh sách có chứa các giá trị mục dữ liệu bằng nhau hay không nhưng nó không tính đến thứ tự của các phần tử trong danh sách. Điều này có nghĩa là danh sách [1,2,3] sẽ bằng danh sách [2,1,3] theo phương pháp so sánh này
Ví dụ
Bản thử trực tiếp
def compareList[l1,l2]: l1.sort[] l2.sort[] if[l1==l2]: return "Equal" else: return "Non equal" l1=[1,2,3] l2=[2,1,3] print["First comparison",compareList[l1,l2]] l3=[1,2,3] l4=[1,2,4] print["Second comparison",compareList[l3,l4]]
đầu ra
First comparison Equal Second comparison Non equal
Sử dụng bộ sưu tập. Phản đối[]
Phương pháp này kiểm tra sự bằng nhau của các danh sách bằng cách so sánh tần suất của từng phần tử trong danh sách đầu tiên với danh sách thứ hai. Phương pháp này cũng không tính đến thứ tự của các phần tử của danh sách
Ví dụ
Bản thử trực tiếp
import collections def compareList[l1,l2]: if[collections.Counter[l1]==collections.Counter[l2]]: return "Equal" else: return "Non equal" l1=[1,2,3] l2=[2,1,3] print["First comparison",compareList[l1,l2]] l3=[1,2,3] l4=[1,2,4] print["Second comparison",compareList[l3,l4]]
đầu ra
First comparison Non equal Second comparison Equal
Sử dụng tổng [], zip [] và len []
Phương pháp này trước tiên so sánh từng phần tử của hai danh sách và lưu trữ chúng dưới dạng tổng của 1, sau đó được so sánh với độ dài của danh sách khác. Đối với phương pháp này, trước tiên chúng ta phải kiểm tra xem độ dài của cả hai danh sách có bằng nhau hay không trước khi thực hiện phép tính này
Phương pháp này cũng kiểm tra thứ tự của các phần tử. Điều này có nghĩa là danh sách [1,2,3] không bằng danh sách [2,1,3]
Ví dụ
Bản thử trực tiếp
def compareList[l1,l2]: if[len[l1]==len[l2] and len[l1]==sum[[1 for i,j in zip[l1,l2] if i==j]]]: return "Equal" else: return "Non equal" l1=[1,2,3] l2=[2,1,3] print["First comparison",compareList[l1,l2]] l3=[1,2,3] l4=[1,2,3] print["Second comparison",compareList[l3,l4]]
đầu ra
First comparison Non equal Second comparison Equal
Như trong ví dụ trên, đối với phép so sánh đầu tiên, các mục dữ liệu trong cả hai danh sách đều bằng nhau nhưng thứ tự của các phần tử khác nhau. Do đó, so sánh đầu tiên trả về không bằng
Sử dụng toán tử ==
Đây là một sửa đổi của phương pháp đầu tiên. Trong phương pháp này, các danh sách được so sánh mà không cần sắp xếp và do đó, phương pháp này tính đến thứ tự của các mục dữ liệu trong danh sách
Ví dụ
Bản thử trực tiếp
def compareList[l1,l2]: if[l1==l2]: return "Equal" else: return "Non equal" l1=[1,2,3] l2=[2,1,3] print["First comparison",compareList[l1,l2]] l3=[1,2,3] l4=[1,2,3] print["Second comparison",compareList[l3,l4]]
đầu ra
First comparison Non equal Second comparison Equal
Đây là một số phương pháp so sánh danh sách trong python, cả hai đều tính đến thứ tự của các mục dữ liệu cũng như không tính đến thứ tự của các mục dữ liệu
Không rõ tại sao chức năng này làm những gì nó làm. Tài liệu [nhận xét/tài liệu] về lý do tại sao chức năng này được triển khai theo cách này sẽ giúp
def display_data[data: list] -> None:
for i in data:
print["===", i, "===", sep="\n"]
5 không bao giờ được sử dụng, hãy xóa nó điỞ trạng thái hiện tại, chức năng có thể dễ dàng được cắt xuống một dòng bằng cách hiểu danh sách
def change_data[items: list[dict]] -> list[dict]:
return [{'Name': item['Name'], 'Status': randrange[2]} for item in items]
Nếu bạn không quen với cách hiểu danh sách và biểu thức trình tạo, tôi khuyên bạn nên tìm hiểu về chúng. Chúng là một công cụ hữu ích [và thường rất hiệu quả]
Nhưng hãy cẩn thận rằng một lớp lót không phải lúc nào cũng là lựa chọn tốt nhất. Nếu việc tạo từ điển trở nên phức tạp hơn, có lẽ tốt hơn là chuyển nó sang chức năng riêng của nó
Cũng lưu ý rằng
def display_data[data: list] -> None:
for i in data:
print["===", i, "===", sep="\n"]
6 không cần nhiều dấu ngoặc đơn. def display_data[data: list] -> None:
for i in data:
print["===", i, "===", sep="\n"]
7def display_data[data: list] -> None:
for i in data:
print["===", i, "===", sep="\n"]
8Tôi khuyên bạn nên cắt phần này xuống còn một câu lệnh
def display_data[data: list] -> None:
for i in data:
print["===", i, "===", sep="\n"]
9 duy nhất cho mỗi lần lặp vòng lặp________số 8hoặc thậm chí tốt hơn
First comparison Equal Second comparison Non equal5
First comparison Equal Second comparison Non equal50
Lần khởi tạo đầu tiên của bạn đối với
First comparison Equal Second comparison Non equal51 ngay lập tức được ghi đè bên trong vòng lặp, hãy xóa nó
First comparison Equal Second comparison Non equal52, không cần dấu ngoặc đơn.
First comparison Equal Second comparison Non equal53
Có nhiều cách tốt hơn [dễ đọc hơn và hiệu quả hơn] để tạo
First comparison Equal Second comparison Non equal54, nên được gọi là
First comparison Equal Second comparison Non equal55 hoặc
First comparison Equal Second comparison Non equal56
- hiểu danh sách.
First comparison Equal Second comparison Non equal
57 - cách tiếp cận chức năng.
First comparison Equal Second comparison Non equal
58
Điều này cũng cho phép bạn loại bỏ cả hai nhiệm vụ
First comparison Equal Second comparison Non equal59, vì những cách tiếp cận này sẽ tạo ra một danh sách trống nếu không có mục mới
Bạn có thể thay thế
import collections def compareList[l1,l2]: if[collections.Counter[l1]==collections.Counter[l2]]: return "Equal" else: return "Non equal" l1=[1,2,3] l2=[2,1,3] print["First comparison",compareList[l1,l2]] l3=[1,2,3] l4=[1,2,4] print["Second comparison",compareList[l3,l4]]60 bằng
import collections def compareList[l1,l2]: if[collections.Counter[l1]==collections.Counter[l2]]: return "Equal" else: return "Non equal" l1=[1,2,3] l2=[2,1,3] print["First comparison",compareList[l1,l2]] l3=[1,2,3] l4=[1,2,4] print["Second comparison",compareList[l3,l4]]61. Tìm hiểu thêm về giá trị thật và giả trong Python
Hoàn thành mã
import collections def compareList[l1,l2]: if[collections.Counter[l1]==collections.Counter[l2]]: return "Equal" else: return "Non equal" l1=[1,2,3] l2=[2,1,3] print["First comparison",compareList[l1,l2]] l3=[1,2,3] l4=[1,2,4] print["Second comparison",compareList[l3,l4]]6
Tiếp cận
Xin lưu ý rằng thuật toán hiện tại chạy trong O[n^2]. Thật không may,
First comparison Non equal Second comparison Equal0 là một loại không thể xóa được trong Python. Do đó, chúng tôi không thể sử dụng
import collections def compareList[l1,l2]: if[collections.Counter[l1]==collections.Counter[l2]]: return "Equal" else: return "Non equal" l1=[1,2,3] l2=[2,1,3] print["First comparison",compareList[l1,l2]] l3=[1,2,3] l4=[1,2,4] print["Second comparison",compareList[l3,l4]]63 để giải quyết vấn đề này, nó sẽ chạy trong O[n]. Thêm về cách tiếp cận đó ở đây