So sánh 2 list trong python và lấy ra các phần tử giống nhau, khác nhau | Laptrinhcanban.com

So sánh 2 list trong python và lấy ra các phần tử giống nhau, khác nhau

Hướng dẫn cách so sánh 2 list trong python. Bạn sẽ học được các cách so sánh 2 list trong python cũng như là cách lấy ra các phần tử giống nhau và khác nhau giữa 2 list trong python sau bài học này.

Chúng ta có 4 phương pháp để so sánh 2 list trong python như sau:

  • Toán tử == và != : Kiểm tra hai list có giống nhau trong Python
  • Toán tử <, <=, >, >= :So sánh lớn nhỏ giữa 2 list trong python
  • Hàm set() python : So sánh 2 list và lấy ra các phần tử giống nhau trong python
  • Hàm set() python : So sánh 2 list và lấy ra các phần tử khác nhau trong python

Chúng ta sẽ cùng tìm hiểu các phương pháp này ở dưới đây.

So sánh 2 list trong python

Để so sánh 2 list trong python, chúng ta sử dụng tới các toán tử so sánh như so sánh bằng hoặc so sánh lớn nhỏ trong python.

Kiểm tra hai list có giống nhau trong Python | toán tử == và !=

Để kiểm tra hai list có giống nhau trong Python, chúng ta sử dụng toán tử so sánh bằng, và nếu như toàn bộ giá trị của các phần tử trong hai list đều giống nhau, giá trị True được trả về. Ví dụ:

print(["Red", "Blue"] == ["Red", "Blue"])
#> True
print(["Red", "Blue"] != ["Red", "Blue"])
#> False
print(["Red", "Blue"] == ["Red", "Blue", "White"])
#> False
print(["Red", "Blue"] != ["Red", "Blue", "White"])
#> True

Tương tự với phép so sánh 2 list có phần tử thuộc kiểu số:

numlist1 = [0,1,2,3]
numlist2 = [0,1,2,3]
numlist3 = [4]

print(numlist1 == numlist2)
#>> True

print(numlist1 == numlist3)
#>> False

Lưu ý là khi so sánh 2 list trong python và kiểm tra xem chúng có giống nhau hay không, chúng ta cần chú ý tới cả thứ tự của các phần tử trong hai list. Nếu như giá trị các phần tử trong hai list là giống nhưng thứ tự của phần tử trong hai list là khác nhau, hai list này sẽ được coi là khác nhau.

print(["Red", "Blue"] == ["Red", "Blue"])
#> True

print(["Red", "Blue"] == ["Blue", "Red"])
#> False

So sánh lớn nhỏ giữa 2 list trong python | toán tử <, <=, >, >=

Khi sử dụng phép so sánh lớn nhỏ để so sánh 2 list trong Python, phần tử đầu tiên có giá trị khác nhau trong 2 list sẽ được dùng để so sánh.

Khi đó tùy thuộc vào phần tử trong 2 list thuộc kiểu dữ liệu nào phép so sánh 2 list trong python sẽ chuyển thành phép so sánh 2 chuỗi trong python hoặc là phép so sánh 2 số trong python v.v..

Ví dụ chúng ta so sánh lớn nhỏ giữa 2 list có phần tử thuộc kiểu chuỗi string như sau:

print(["red", "blue", "green"] > ["red", "blue", "white"])
#> False

Phép so sánh 2 list ở trên thực chất đã chuyển về phép so sánh 2 chuỗi python bằng cách so sánh các điểm mã unicode (unicode code point) của hai chuỗi như sau:

print( "green" > "white")
#>> False

Tương tự khi chúng ta so sánh lớn nhỏ giữa 2 list có phần tử thuộc kiểu số trong python:

numlist1 = [0,1,2,3]
numlist2 = [0,1,5,3]

print(numlist1 <= numlist2)
#>> True

Phép so sánh 2 list ở trên thực chất đã chuyển về phép so sánh 2 số python như sau:

print( 2 <=  5)
#>> True

Lưu ý là nếu phần tử đầu tiên có giá trị khác nhau trong 2 list thuộc các kiểu dữ liệu khác nhau, thì cũng có khả năng chúng ta không thể tiến hành so sánh chúng được.
Ví dụ:

numlist = [0,1,2,3]
mixlist = [0,1,'Bob',3]
print(numlist1 <= numlist2)

Do lúc này, phép so sánh 2 list python ở trên sẽ chuyển về phép so sánh giữa string và số ( so sánh 2 với ‘Bob’) nên lỗi TypeError sẽ bị trả về như sau:

Traceback (most recent call last):
File "Main.py", line 3, in <module>
print(numlist <= mixlist)
TypeError: '<=' not supported between instances of 'int' and 'str'

So sánh 2 list và lấy ra các phần tử giống nhau trong python | hàm set() python

Trong python không có một hàm hay phương thức nào giúp chúng ta có thể so sánh trực tiếp và lấy ra các phần tử giống nhau giữa hai list cả.

Để so sánh 2 list trong python và lấy các phần tử giống nhau, chúng ta cần chuyển 2 list đã cho về kiểu set (tập hợp), sau đó mới tìm ra phần tử giống nhau giữa chúng thông qua phép tìm giao hai tập hợp bằng toán tử & trong python.

Việc chuyển list về kiểu set còn có một tác dụng nữa là giúp chúng ta xóa các phần tử trùng nhau trong list python trước khi đem chúng đi so sánh.

Sau đây, chúng ta sẽ xem ví dụ cụ thể về so sánh 2 list trong python và lấy các phần tử giống nhau giữa chúng như sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,5,3]
l3 = [0,1,'Bob',3]

print( set(l1) & set(l2) )
#>> {0, 1, 3}

print( set(l1) & set(l3) )
#>> {0, 1, 3, 'Bob'}

print(type(set(l1) & set(l3)))
#>> <class 'set'>

Sau khi thu về set kết quả chứa các phần tử giống nhau giữa 2 list đã cho, chúng ta có thể dùng vòng lặp for để lấy ra các phần tử trong set kết quả. Lưu ý là do trong set không tồn tại index nên thứ tự lấy các phần tử và in ra màn hình có thể khác nhau trong các lần thực thi.

l1 = [0,1,2,3,'Bob']
l2 = [0,1,'Bob',3]

common_s = set (l1) & set(l2)
for i in common_s:
print(i)
#>> 0
#>> 1
#>> 3
#>> Bob

Chúng ta cũng có thể tìm số phần tử trùng nhau giữa 2 list python bằng cách sử dụng hàm len() để đếm số phần tử trong set kết quả thu về. Ví dụ:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,'Bob',3]
commmon_count = len( set(l1) & set(l2) )
print(commmon_count)
#>> 4

Bạn cũng có thể chuyển set kết quả về kiểu list và thu về một list mới chứa các phần tử giống nhau trong 2 list ban đầu bằng cách sử dụng thêm hàm set() với hàm list() trong python như ví dụ sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,'Bob',3]

common_l = list( set (l1) & set(l2) )

print(common_l[2])
#>> Bob

Tương tự khi so sánh 2 list, bạn cũng có thể so sánh 3 list hay nhiều list với nhau và tìm ra các phần tử giống nhau trong python như sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,5,3]
l3 = [0,1,'Bob',3]
l1_l2_l3 = set(l1) & set(l2) & set(l3)
print(l1_l2_l3)
#>> {0, 1, 3}

So sánh 2 list và lấy ra các phần tử khác nhau trong python | hàm set() python

Trong python không có một hàm hay phương thức nào giúp chúng ta có thể so sánh trực tiếp và lấy ra các phần tử khác nhau giữa hai list cả.

Để so sánh 2 list trong python và lấy các phần tử khác nhau, chúng ta cần chuyển 2 list đã cho về kiểu set (tập hợp), sau đó mới tìm ra phần tử khác nhau giữa chúng thông qua phép tìm phần bù giữa hai tập hợp bằng toán tử ^ trong python.

Việc chuyển list về kiểu set còn có một tác dụng nữa là giúp chúng ta xóa các phần tử trùng nhau trong list python trước khi đem chúng đi so sánh.

Sau đây, chúng ta sẽ xem ví dụ cụ thể về so sánh 2 list trong python và lấy các phần tử khác nhau giữa chúng như sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,5,3]
l3 = [0,1,'Bob',4]

print( set(l1) ^ set(l2) )
#>> {2, 5, 'Bob'}

print( set(l1) ^ set(l3) )
#>> {2, 3, 4}

print(type(set(l1) ^ set(l3)))
#>> <class 'set'>

Sau khi thu về set kết quả chứa các phần tử khác nhau giữa 2 list đã cho, chúng ta có thể dùng vòng lặp for để lấy ra các phần tử trong set kết quả. Lưu ý là do trong set không tồn tại index nên thứ tự lấy các phần tử và in ra màn hình có thể khác nhau trong các lần thực thi.

l1 = [0,1,2,3,'Bob']
l2 = [0,1,'Bob',4]

common_s = set (l1) ^ set(l2)
for i in common_s:
print(i)
#>> 2
#>> 3
#>> 4

Chúng ta cũng có thể tìm số phần tử khác nhau giữa 2 list python bằng cách sử dụng hàm len() để đếm số phần tử trong set kết quả thu về. Ví dụ:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,5,3]
commmon_count = len( set(l1) ^ set(l2) )
print(commmon_count)
#>> 3

Bạn cũng có thể chuyển set kết quả về kiểu list và thu về một list mới chứa các phần tử khác nhau trong 2 list ban đầu bằng cách sử dụng thêm hàm set() với hàm list() trong python như ví dụ sau:

l1 = [0,1,2,3,'Bob']
l2 = [0,1,'Bob',4]

common_l = list( set (l1) ^ set(l2) )

print(common_l[2])
#>> 4

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về cách so sánh 2 list trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.