So sánh hai số trong danh sách python

Trong ngôn ngữ lập trình Python, một danh sách được định nghĩa là một vùng chứa có thể sửa đổi, có thứ tự. Một danh sách có thể được sử dụng để giữ các đối tượng tương tự nhau về bản chất. Khi viết bằng Python, so sánh thường được sử dụng để kiểm tra các điều kiện khác nhau. Để kiểm tra một điều kiện, chúng ta có thể cần so sánh hai biến hoặc hai bộ biến. Trong blog này, chúng ta sẽ xem xét các phương pháp khác nhau để so sánh hai danh sách trong Python. Khi so sánh, chúng ta phải xác định xem cả hai danh sách có bao gồm các thành phần giống nhau hay không, bất kể thứ tự xuất hiện của các thành phần trong danh sách

Phạm vi của Điều khoản

  • Trong bài viết này, chúng tôi sẽ đi sâu vào sự phức tạp của việc so sánh danh sách python bằng cách hướng dẫn bạn từng bước từ những điều cơ bản đến các khái niệm trung gian
  • Chúng ta sẽ bắt đầu với vai trò của một danh sách Python và mở rộng nó theo những cách khác nhau để chúng ta có thể so sánh hai danh sách trong Python
  • Chúng ta sẽ đi qua toán tử ==, sắp xếp dọc theo toán tử ==, cho các vòng lặp, sử dụng hàm zip[] và sử dụng các tập hợp. Hàm Counter[], sử dụng hàm reduce[] kết hợp với hàm map[] và hàm differ[];

Giới thiệu

Trước khi bắt đầu, chúng tôi sẽ cho rằng bạn đã cài đặt thành công Python trên hệ thống của mình và đã quen thuộc với Nguyên tắc cơ bản về Python

Chúng ta hãy lùi lại một bước và xem Cấu trúc dữ liệu danh sách, cần thiết để hiểu so sánh danh sách python. Nếu bạn đã quen thuộc với nó, hãy chuyển sang phần "Làm thế nào để so sánh hai danh sách trong Python?"

Danh sách Python chính xác là gì?

Có một số cấu trúc dữ liệu trong Python, nhưng Danh sách là một trong những cấu trúc cơ bản và quan trọng nhất. Cùng với chuỗi tuyến tính, Danh sách hoạt động tương tự như một mảng động và có nhiều phương thức tích hợp để thực hiện các hành động khác nhau trên dữ liệu được lưu trữ trong đó. Việc lập chỉ mục của Danh sách bắt đầu từ 0 và tăng dần đến [độ dài của Danh sách - 1]. Danh sách hỗ trợ một số thao tác như thêm, nhân, cắt, thành viên và so sánh. Danh sách được sử dụng trong Python để giữ chuỗi kiểu dữ liệu riêng biệt. Danh sách Python có thể thay đổi, có nghĩa là chúng có thể thay đổi các mục sau khi chúng được tạo. Danh sách là một trong bốn cấu trúc dữ liệu Python để lưu trữ các bộ sưu tập dữ liệu;

Danh sách trong Python, như bạn có thể biết, có thể thay đổi và có thể lưu trữ một số lượng mục nhập hữu hạn. Dựa trên các tiêu chí rộng, chúng tôi không thể xác định xem một danh sách nhiều hơn hay ít hơn bất kỳ danh sách nào khác. Khi chúng ta nói về việc so sánh các danh sách, chúng ta ngụ ý xác định xem hai danh sách có chứa các mục giống nhau hay không

Làm cách nào để so sánh hai danh sách trong Python?

Một trong những thao tác cơ bản nhất trong mọi ngôn ngữ lập trình là so sánh. Tuy nhiên, ngay cả một hành động có vẻ cơ bản cũng có thể châm ngòi cho hàng loạt cuộc tranh luận hấp dẫn

Trong hầu hết các trường hợp, trong suốt quá trình phát triển, chúng ta cần so sánh các phần tử dữ liệu trong một danh sách. So sánh là một cách tiếp cận để so sánh phần tử dữ liệu của một danh sách với phần tử dữ liệu của một danh sách khác

Hóa ra việc so sánh hai danh sách trong Python khá căng thẳng, nhưng đừng lo, tôi đã giúp bạn. Trong blog này, chúng ta sẽ khám phá nhiều cách tiếp cận để so sánh hai danh sách

Phương pháp 1. So sánh đơn giản

Toán tử l1 == l2 để so sánh theo từng phần tử là cách tiếp cận Pythonic nhất để xác minh xem hai danh sách có thứ tự l1 và l2 có giống nhau không. Kết quả trả về là True nếu tất cả các mục đều bằng nhau và độ dài của các danh sách giống nhau. Phương pháp so sánh này hoạt động tốt đối với các tình huống đơn giản, nhưng nó không hoạt động đối với các so sánh phức tạp, như chúng ta sẽ thấy sau

Danh sách các đối tượng số nguyên hoặc chuỗi là một ví dụ về trường hợp cơ bản

Mã số

numbers = [1, 2, 3]
target = [1, 2, 3]
print[numbers == target]

đầu ra

Khá đơn giản, phải không?

Ngoại lệ. Thật không may, thế giới, giống như mã chất lượng sản xuất, rất phức tạp. Mọi thứ trở nên khó khăn nhanh chóng trong thế giới thực. Xem xét các tình huống sau đây làm ví dụ

Giả sử bạn có một danh sách các dấu phẩy động được tạo động. Bạn có thể kết hợp một phần tử hoặc số dấu phẩy động thu được từ các phép toán như 0. 1 + 0. 2 + 0. 1

Mã số

numbers = []
numbers.append[0.1 + 0.2 +0.1]
numbers.append[0.2] 
target = [0.4, 0.2]
print[numbers == target]
print[numbers]
print[target]

đầu ra

False
[0.40000000000000004, 0.2]
[0.4, 0.2]

Rõ ràng, toán học dấu phẩy động có giới hạn và có những lúc chúng ta muốn so sánh hai danh sách trong khi bỏ qua các vấn đề về độ chính xác hoặc thậm chí chỉ định ngưỡng. Toán tử == sẽ không đủ trong trường hợp này

Sử dụng == không phải là câu trả lời trong mọi trường hợp; . Toán tử đẳng thức == so sánh một phần tử danh sách theo phần tử

Phương pháp 2. Sắp xếp đầu tiên và sau đó sử dụng toán tử ==

Trong Python, bạn có thể sắp xếp danh sách theo hai phương pháp. Đầu tiên là sử dụng danh sách. sort[], còn lại chúng ta có thể sử dụng hàm sorted[]

Cách tiếp cận đầu tiên sắp xếp danh sách tại chỗ, ngụ ý rằng danh sách của bạn sẽ bị thay đổi. Tốt nhất là không nên thay đổi danh sách hiện có vì điều này có thể mang lại những sai sót khó phát hiện

Phương thức sorted[] thích hợp hơn vì nó trả về một danh sách mới trong khi không thay đổi danh sách ban đầu

Với sự trợ giúp của một ví dụ, hãy xem nó hoạt động như thế nào

Mã số

numbers = [10, 30, 20]
target = [10, 20, 30]
print[numbers == target]
print[sorted[numbers] == sorted[target]]
print[sorted[numbers]]
print[sorted[target]]

đầu ra

False
True
[10, 20, 30]
[10, 20, 30]

Do đó, bằng cách sắp xếp danh sách trước, chúng tôi đảm bảo rằng chúng có cùng thứ tự và do đó có thể được so sánh bằng cách sử dụng toán tử ==

Phương pháp 3. Sử dụng cho vòng lặp

Cách tiếp cận sau đây có thể được sử dụng bởi nhà phát triển nhập từ ngôn ngữ lập trình khác hoặc bởi người mới không quen với toán tử đẳng thức trong danh sách

Mã số

def method_3[l1, l2]:
   for i in range[min[len[l1], len[l2]]]:
       if l1[i] != l2[i]:
           return False
   return len[l1] == len[l2]
numbers = [10, 20, 20]
target = [10, 20, 30]
print[method_3[numbers, target]]

đầu ra

Bạn lặp qua tất cả các chỉ số từ 0 đến [độ dài của danh sách nhỏ nhất - 1] , như được xác định bởi thành phần min[len[l1], len[l2]. Sau đó bạn kiểm tra xem 2 linh kiện ở cùng một chỗ có khác nhau không. Nếu chúng khác nhau, tôi. e. , l1[i]. = l2[i], bạn có thể trả về Sai ngay vì các danh sách khác nhau

Các thành phần danh sách có thể so sánh được nếu bạn chạy qua toàn bộ vòng lặp mà không trả về Sai. Tuy nhiên, một danh sách có thể còn dài hơn. Vì vậy, bằng cách trả về len[l1] == len[l2], bạn đảm bảo rằng bạn chỉ trả về True nếu tất cả các mục giống hệt nhau và các danh sách có cùng độ dài. Rất nhiều mã để làm điều gì đó thật dễ dàng. Chúng ta hãy xem xét một cách tiếp cận tốt hơn bằng cách sử dụng phương thức zip[] để giảm thiểu độ phức tạp của mã

Phương pháp 4. Sử dụng chức năng zip[] Cùng với for Loop

Hàm zip chấp nhận danh sách các lần lặp và kết hợp các giá trị thứ i của chúng thành một bộ cho mỗi lần lặp i.

Hãy xem cách chúng ta có thể tận dụng phương thức zip[] để làm cho mã trước đó ngắn hơn

Mã số

def method_4[l1, l2]:
   for x, y in zip[l1, l2]:
       if x != y:
           return False
   return len[l1] == len[l2]
numbers = [1, 2, 3, 4, 5]
target = [1, 2, 3]
print[method_4[numbers, target]]

đầu ra

Giờ đây, bạn lặp lại các cặp mục thay vì chỉ mục [các mục được nén lại với nhau]. Nếu danh sách có độ dài khác nhau, các mục còn lại từ danh sách dài hơn sẽ bị bỏ qua. Điều này đơn giản hóa việc so sánh từng phần tử và loại bỏ sự cần thiết của các kỹ thuật lập chỉ mục phức tạp

Phương pháp 5. hàm cmp[]

Ghi chú. Hàm cmp[] không được hỗ trợ trong Python 3. x

Hàm cmp[] là một cơ chế tích hợp sẵn của Python để so sánh các mục của hai danh sách. Hàm này cũng có thể so sánh hai mục và trả về kết quả dựa trên các đầu vào được cung cấp. Giá trị trả về này có thể là một trong ba điều. 1, 0 hoặc -1

Chẳng hạn, nếu l1 và l2 là hai danh sách, thì giá trị 1 được trả về nếu l1 [danh sách 1] lớn hơn l2 [hoặc danh sách 2]. Nếu l1 nhỏ hơn l2, giá trị -1 được trả về; . Bây giờ chúng ta hãy xem một ví dụ. Mã số

list1 = [ 1, 2, 4, 3]
list2 = [ 1, 2, 5, 8]
list3 = [ 1, 2, 5, 8, 10]
list4 = [ 1, 2, 4, 3]
  
# Comparing lists 
print "Comparison of list2 with list1 : ",
print cmp[list2, list1]
print "Comparison of list2 with list3[larger size] : ",
print cmp[list2, list3]
print "Comparison of list4 with list1[equal] : ",
print cmp[list4, list1]

đầu ra

________số 8

Phương pháp 6. Sử dụng hàm map[] Cùng với hàm reduce[]

Phương thức map[] lấy đầu vào là một hàm và một đối tượng có thể lặp lại của Python [danh sách, bộ dữ liệu, chuỗi, v.v. ] và tạo ra một đối tượng bản đồ. Hàm áp dụng cho từng phần tử danh sách và kết quả là trả về một trình vòng lặp

cú pháp

map[funtion, iterable_object]

Hơn nữa, python có một phương thức có tên là reduce[] cho phép chúng ta cô đọng một danh sách. Phương thức reduce[] áp dụng đệ quy hàm đã chỉ định cho đối tượng có thể lặp lại. Để sử dụng phương thức reduce[], trước tiên chúng ta phải nhập mô-đun functool

cú pháp

numbers = []
numbers.append[0.1 + 0.2 +0.1]
numbers.append[0.2] 
target = [0.4, 0.2]
print[numbers == target]
print[numbers]
print[target]
0

Để so sánh hai danh sách, chúng ta có thể sử dụng đồng thời cả hai cách tiếp cận. Phương thức map[] sẽ áp dụng hàm cho từng đối tượng có thể lặp lại và hàm reduce[] sẽ xử lý đệ quy. Xem xét ví dụ sau

Ghi chú. Trước khi sử dụng các phương pháp này, bạn phải sắp xếp các danh sách

Mã số

numbers = []
numbers.append[0.1 + 0.2 +0.1]
numbers.append[0.2] 
target = [0.4, 0.2]
print[numbers == target]
print[numbers]
print[target]
1

đầu ra

Ghi chú. Hàm lambda là một hàm ẩn danh nhỏ. Hàm lambda có thể có vô số tham số nhưng chỉ có một biểu thức

cú pháp

numbers = []
numbers.append[0.1 + 0.2 +0.1]
numbers.append[0.2] 
target = [0.4, 0.2]
print[numbers == target]
print[numbers]
print[target]
2

Hàm map[] trong ví dụ trên kết hợp tất cả các cặp mục thành giá trị Boolean; . Phương thức reduce[] thực hiện thao tác và trên tất cả các giá trị Boolean

Phương pháp 7. Sử dụng bộ sưu tập. Phản đối[]

cú pháp

numbers = []
numbers.append[0.1 + 0.2 +0.1]
numbers.append[0.2] 
target = [0.4, 0.2]
print[numbers == target]
print[numbers]
print[target]
3

Để so sánh hiệu quả các danh sách, hãy sử dụng bộ sưu tập. hàm truy cập []. Lớp Bộ đếm Python được bao gồm trong mô-đun Bộ sưu tập. Nó là một lớp con từ điển. Nó theo dõi các mục dưới dạng khóa từ điển và số lượng của chúng là giá trị từ điển. Sử dụng điều này, chúng ta có thể tính toán tần suất của từng phần tử trong danh sách và sử dụng toán tử == để xác định xem hai danh sách có giống nhau không

Ghi chú. Thứ tự của danh sách không ảnh hưởng đến hàm counter[]

Bây giờ chúng ta hãy xem một ví dụ. Mã số

numbers = []
numbers.append[0.1 + 0.2 +0.1]
numbers.append[0.2] 
target = [0.4, 0.2]
print[numbers == target]
print[numbers]
print[target]
4

đầu ra

numbers = []
numbers.append[0.1 + 0.2 +0.1]
numbers.append[0.2] 
target = [0.4, 0.2]
print[numbers == target]
print[numbers]
print[target]
5

Phương pháp 8. Sử dụng hàm khác biệt []

cú pháp

Chúng tôi cũng sử dụng phương thức differ[] để so sánh danh sách. Hàm Difference[] mang lại sự khác biệt giữa hai tập hợp dưới dạng một tập hợp. Bộ được trả về bao gồm những thứ chỉ tồn tại trong bộ đầu tiên và không có trong cả hai

Để sử dụng hàm differ[], trước tiên chúng ta phải chuyển đổi danh sách của mình thành các tập hợp

Vì vậy, Chính xác thì 'Bộ' là gì?

Set là một trong bốn kiểu dữ liệu có sẵn của Python để lưu trữ các bộ sưu tập dữ liệu. Một bộ là một bộ sưu tập không có thứ tự, không thay đổi và không được lập chỉ mục. Trong Python, phương thức set[] lấy một đầu vào và chuyển đổi nó thành một đối tượng được thiết lập. Nó chấp nhận các tham số như danh sách, bộ dữ liệu và từ điển. Vì các mục được cung cấp dưới dạng danh sách không theo thứ tự nên đầu ra của các phần tử có thể không theo cùng một thứ tự. Hai phần tử có cùng giá trị không thể tồn tại trong một tập hợp

Xem xét ví dụ sau

Mã số

numbers = []
numbers.append[0.1 + 0.2 +0.1]
numbers.append[0.2] 
target = [0.4, 0.2]
print[numbers == target]
print[numbers]
print[target]
6

đầu ra

numbers = []
numbers.append[0.1 + 0.2 +0.1]
numbers.append[0.2] 
target = [0.4, 0.2]
print[numbers == target]
print[numbers]
print[target]
7

Trong ví dụ trên, đầu tiên chúng ta sử dụng hàm set[] để chuyển đổi một danh sách thành một tập hợp, sau đó chúng ta sử dụng hàm differ[] để phân biệt giữa hai tập hợp này và cuối cùng chúng ta sử dụng điều kiện if[] để kiểm tra giá trị trả về

Điều này đưa chúng ta đến cuối blog. Có vẻ như bạn đã thành thạo một vài kỹ thuật so sánh danh sách Python. Chiến lược tối ưu được xác định dựa trên loại quân cờ chúng tôi có và cách chúng tôi muốn so sánh chúng

Chủ Đề