Kiểm Tra Và Lấy Phần Tử Trùng Nhau Trong List Python
Có thể bạn quan tâm
Hướng dẫn tất cả các cách kiểm tra và lấy phần tử trùng nhau trong list python. Bạn sẽ học được cách kiểm tra có phần tử trùng nhau trong list python, cũng như cách lấy phần tử trùng nhau trong list python nếu tồn tại phần tử trùng nhau trong list sau bài học này.
- Xem thêm Xóa phần tử trùng nhau trong list python
Kiểm tra phần tử trùng nhau trong list python
Kiểm tra phần tử trùng nhau trong list python thông thường
Để kiểm tra có tồn tại phần tử trùng nhau trong list python hay không, chúng ta sử dụng tới hàm set() trong python.
Trong bài viết Xóa phần tử trùng nhau trong list python chúng ta đã biết cách sử dụng hàm set để xóa đi phần tử trùng lặp trong list rồi phải không nào?
Ý tưởng ở đây sẽ là, chúng ta sẽ xóa phần tử trùng nhau trong list ban đầu để thu về một set, sau đó so sánh số phần tử trong set và trong list ban đầu với nhau. Nếu hai giá trị bằng nhau chứng tỏ không có phần tử trùng lặp nào bị xóa cả, do đó trong list ban đầu không tồn tại phần tử trùng nhau.
Và ngược lại, nếu hai giá trị này khác nhau, chứng tỏ trong list ban đầu có tồn tại phần tử trùng lặp.
Cụ thể chúng ta tạo ra một hàm kiểm tra phần tử trùng nhau trong list python và sử dụng như sau:
def check_duplicate_list(mylist): if len(mylist) != len(set(mylist)): return "Tồn tại phần tử trùng lặp trong list" else: return "Không có phần tử trùng lặp trong list" l = [0, 1, 2]print(check_duplicate_list(l))##> Không có phần tử trùng lặp trong listl = ['a', 'b', 'c', 'a']print(check_duplicate_list(l))##> Tồn tại phần tử trùng lặp trong list |
Ngoài kiểm tra phần tử trùng nhau trong list, chúng ta cũng có thể sử dụng hàm tự tạo check_duplicate_list() ở trên để kiểm tra phần tử trùng nhau trong tuple như sau:
t = (0, 1, 2)print(check_duplicate_list(t))##> Không có phần tử trùng lặp trong listt = ('a', 'b', 'c', 'a')print(check_duplicate_list(t))#>> Tồn tại phần tử trùng lặp trong list |
Lưu ý là chúng ta không thể dùng phương pháp này để kiểm tra phần tử trùng nhau trong list 2 chiều trong python, do list hai chiều chứa các phần tử không phải là giá trị hasable nên không thể chuyển qua dạng set bằng hàm list được. Lỗi sau sẽ xảy ra.
l_2d = [[0, 1], [1, 1], [0, 1], [1, 0]] print(has_duplicates(l_2d))type: 'list' TypeError: unhashable |
Thay vào đó, chúng ta sẽ sử dụng phương pháp ở dưới đây.
Kiểm tra phần tử trùng nhau trong list 2 chiều trong python
Để kiểm tra phần tử trùng nhau trong list 2 chiều trong python, chúng ta cũng dùng chung ý tưởng với phương pháp kiểm tra phần tử trong list thông thường, đó là [xóa phần tử trùng nhau trong list hai chiều] và so sánh số phần tử trong list) trước và sau khi xóa.
Tuy nhiên do không thể dùng hàm set() với list 2 chiều nên chúng ta sẽ tạo một hàm mới và sử dụng hàm để kiểm tra phần tử trùng nhau trong list 2 chiều trong python như sau:
def check_duplicate_list_all(l_2d): kiemtra = [] unique_list = [x for x in l_2d if x not in kiemtra and not kiemtra.append(x)] if len(l_2d) != len(unique_list): return "Tồn tại phần tử trùng lặp trong list" else: return "Không có phần tử trùng lặp trong list"l_2d1 = [[0, 0], [0, 1], [1, 1], [1, 0]]print(check_duplicate_list_all(l_2d1))#>> Không có phần tử trùng lặp trong listl_2d2 = [['a', 'b'], ['a', 'b'], [1, 1], [1, 1]]print(check_duplicate_list_all(l_2d2))#>> Không có phần tử trùng lặp trong list |
Kiểm tra phần tử trùng nhau trong list python tổng quát
Ở phần trên chúng ta đã biết rằng cách sử dụng hàm set() để kiểm tra phần tử trùng nhau trong list python không thể sử dụng được cho các list 2 chiều trong python, cũng như cách tạo riêng một hàm khác để kiểm tra phần tử trùng nhau trong list 2 chiều rồi.
Tuy nhiên điều đặc biệt ở đây đó là, thực ra hàm check_duplicate_list_all() mà chúng ta vừa tạo ở trên còn có thể sử dụng được cho cả list bình thường nữa.
Ví dụ:
def check_duplicate_list_all(l_2d): kiemtra = [] unique_list = [x for x in l_2d if x not in kiemtra and not kiemtra.append(x)] if len(l_2d) != len(unique_list): return "Tồn tại phần tử trùng lặp trong list" else: return "Không có phần tử trùng lặp trong list"l = [0, 1, 2]print(check_duplicate_list_all(l))##> Không có phần tử trùng lặp trong listl = ['a', 'b', 'c', 'a']print(check_duplicate_list_all(l))##> Tồn tại phần tử trùng lặp trong list |
Chúng ta cũng có thể sử dụng hàm trên để kiểm tra phần tử trùng nhau trong tuple python nữa:
t = (0, 1, 2)print(check_duplicate_list_all(t))##> Không có phần tử trùng lặp trong listt = ('a', 'b', 'c', 'a')print(check_duplicate_list_all(t))#>> Tồn tại phần tử trùng lặp trong list |
Do đó một cách tổng quát cho tất cả các trường hợp, bạn hãy dùng hàm tự tạo sau đây để kiểm tra phần tử trùng nhau trong list hoặc tuple trong python:
def check_duplicate_list_all(l_2d): kiemtra = [] unique_list = [x for x in l_2d if x not in kiemtra and not kiemtra.append(x)] if len(l_2d) != len(unique_list): return "Tồn tại phần tử trùng lặp trong list hoặc tuple python" else: return "Không có phần tử trùng lặp trong list hoặc tuple python" |
- Về cách tạo hàm trong python, hãy tham khảo bài viết Def trong python và cú pháp tạo hàm.
Lấy phần tử trùng nhau trong list python
Lấy phần tử trùng nhau trong list python | collections.Counter()
Để lấy phần tử trùng nhau trong list python, chúng ta sử dụng tới hàm Counter() trong module collection với cú pháp sau đây:
import collections
collections . Counter ( l )
Trong đó l là list cần lấy phần tử trùng nhau ra. Kết quả của hàm collections.Counter() là một dictionary với cặp khóa - giá trị là phần tử và số lần xuất hiện của nó trong list ban đầu.
Ví dụ:
import collectionsl = [1, 2, 1, 2, 5, 3, 4, 2, 3]c = collections.Counter(l)print(c)#>> Counter({2: 3, 1: 2, 3: 2, 5: 1, 4: 1}) |
Sau khi đã có kết quả của hàm Counter(), bằng cách sử dụng tới hàm item() trong python, chúng ta có thể lấy ra các key có value lớn hơn 1, chính là các phần tử trùng nhau trong list ban đầu.
Cụ thể chúng ta kết hợp với list comprehension và viết lệnh như sau:
print([k for k, v in collections.Counter(l).items() if v > 1])# [1, 2, 3] |
- Tham khảo Sử dụng list comprehension trong Python
Lấy phần tử trùng nhau trong list python | hàm sorted()
Hàm collections.Counter() mới bắt đầu được sử dụng từ Python3.7, do đó chúng ta còn một cách cũ hơn để lấy phần tử trùng nhau trong list python là sử dụng hàm sorted() trong python.
Ví dụ cũng với list ở trên, chúng ta sẽ lấy các phần tử trùng nhau bằng sorted() như sau:
import collectionsl = [1, 2, 1, 2, 5, 3, 4, 2, 3]c = collections.Counter(l)print(sorted([k for k, v in collections.Counter(l).items() if v > 1], key=l.index))#>> [1, 2, 3] |
Lại nữa, trong trường hợp bạn muốn lấy các phần tử đó trong trạng thái trùng lặp, chúng ta có thể sửa lại code một chút như sau:
import collectionsl = [1, 2, 1, 2, 5, 3, 4, 2, 3]c = collections.Counter(l)print([x for x in l if cc[x] > 1])#>> [1, 2, 1, 2, 3, 2, 3] |
Lấy phần tử trùng nhau trong list 2 chiều trong python
Để lấy phần tử trùng nhau trong list 2 chiều trong python, do không thể sử dụng tới Couter() hay sorted() nên chúng ta cần tạo ra một hàm tự tạo để giải quyết vấn đề này.
Ví dụ chúng ta có một list 2 chiều như sau:
l = [[1, 2], [0, 1], [0, 1], [0, 0], [1, 0], [1, 2], [1, 2]] |
Chúng ta sẽ tự tạo hàm lấy phần tử trùng nhau trong list 2 chiều ở trên như sau:Lấy phần tử trùng nhau trong list 2 chiều trong python không cần giữ nguyên thứ tự ban đầu
def get_duplicate_list(l): seen = [] return [x for x in l if not seen.append(x) and seen.count(x) == 2]l = [[1, 2], [0, 1], [0, 1], [0, 0], [1, 0], [1, 2], [1, 2]]print(get_duplicate_list(l))#>> [[0, 1], [1, 2]] |
Lấy phần tử trùng nhau trong list 2 chiều trong python giữ nguyên thứ tự ban đầu
seen = [] return [x for x in l if l.count(x) > 1 and not seen.append(x) and seen.count(x) == 1]l = [[1, 2], [0, 1], [0, 1], [0, 0], [1, 0], [1, 2], [1, 2]]print(get_duplicate_list_order(l))#>> [[1, 2], [0, 1]] |
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn cách kiểm tra và lấy phần tử trùng nhau trong list 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.
URL Link
https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/list-trong-python/kiem-tra-va-lay-phan-tu-trung-nhau-trong-list-python/
Từ khóa » Xét Xem Trong Xâu Có K Kí Tự Kề Nhau Mà Như Nhau Hay Không Python
-
Nhập 1 Xâu Kí Tự. Xét Xem Trong Xâu Có K Kí Tự E Kề Nhau Mà Như ...
-
Chuỗi Trong Python (Kiểu Xâu String Trong Python) - O₂ Education
-
Giải Các Bài Toán Về Xâu Kí Tự
-
Bài Tập Xâu Cơ Bản Trong Pascal - Tài Liệu Text - 123doc
-
Đếm Các Từ Xuất Hiện Trong Chuỗi Python - Lập Trình Không Khó
-
So Sánh Chuỗi Trong Python
-
Xác định Xem Có Hai Ký Tự Giống Nhau Liền Kề Với Nhau Không - HelpEx
-
Rút Gọn Xâu Có Các Kí Tự Trùng??? [Archive] - Diễn Đàn Tin Học
-
Viết Chương Trình đếm Các Loại Ký Tự Từ Xâu Nhập Từ Bàn Phím In Kết ...
-
Cùng ôn Lại Những Thuật Toán Sắp Xếp Và Xây Dựng Hàm Sort Sử ...
-
Một Số Bài Toán Quy Hoạch động điển Hình - VNOI
-
Giới Thiệu Về Các Hàm Chuỗi Trong Python 3
-
SGK TIN PYPHON - Tải Xuống Sách | 1-50 Các Trang | PubHTML5
-
Chuỗi (String) Trong Python - Học Lập Trình Python - Viettuts