Cách xóa danh sách trùng lặp khỏi danh sách trong Python
⚡ Tóm tắt thông minh
Xóa các mục trùng lặp khỏi Python Việc tạo danh sách có thể được thực hiện bằng một số phương pháp tích hợp sẵn, bao gồm set(), dict.fromkeys(), vòng lặp, list comprehensions và các phương thức thư viện từ NumPy và Pandas, mỗi phương thức đều cân bằng giữa việc bảo toàn thứ tự và tốc độ.

Python xóa các bản sao khỏi danh sách
Một danh sách là một vùng chứa chứa các Python các đối tượng, có thể là số nguyên, từ, giá trị, v.v. Nó tương đương với một mảng trong các ngôn ngữ lập trình khác.
Vậy ở đây chúng ta sẽ xem xét các cách khác nhau để loại bỏ các phần tử trùng lặp khỏi một danh sách cho trước. Python.
Phương pháp 1) Xóa các bản sao khỏi danh sách bằng Set
Để loại bỏ các phần tử trùng lặp khỏi một danh sách, bạn có thể sử dụng hàm tích hợp sẵn `set()`. Đặc điểm của phương thức `set()` là nó trả về các phần tử khác nhau.
Chúng ta có một danh sách: [1,1,2,3,2,2,4,5,6,2,1]. Danh sách này có nhiều phần tử trùng lặp mà chúng ta cần loại bỏ và chỉ giữ lại các phần tử khác nhau. Danh sách này được truyền cho hàm tích hợp set(). Later Danh sách cuối cùng được hiển thị bằng cách sử dụng hàm tích hợp list().
Kết quả mà chúng ta nhận được là các phần tử riêng biệt, trong đó tất cả các phần tử trùng lặp đã được loại bỏ.
Ví dụ
my_list = [1,1,2,3,2,2,4,5,6,2,1]
my_final_list = set(my_list)
print(list(my_final_list))
Đầu ra:
[1, 2, 3, 4, 5, 6]
Phương pháp 2) Sử dụng danh sách tạm thời
Để loại bỏ các phần tử trùng lặp khỏi một danh sách cho trước, bạn có thể sử dụng một danh sách tạm thời trống. Để làm điều đó, trước tiên bạn phải lặp qua danh sách có chứa các phần tử trùng lặp và thêm các phần tử duy nhất vào danh sách tạm thời. Later danh sách tạm thời được gán vào danh sách chính.
Ví dụ
Dưới đây là một ví dụ thực tế sử dụng danh sách tạm thời.
my_list = [1, 2, 3, 1, 2, 4, 5, 4 ,6, 2] print("List Before ", my_list) temp_list = [] for i in my_list: if i not in temp_list: temp_list.append(i) my_list = temp_list print("List After removing duplicates ", my_list)
Đầu ra:
List Before [1, 2, 3, 1, 2, 4, 5, 4, 6, 2] List After removing duplicates [1, 2, 3, 4, 5, 6]
Phương pháp 3) Sử dụng Dict
Chúng ta có thể loại bỏ các phần tử trùng lặp khỏi danh sách đã cho bằng cách nhập OrderedDict từ collections. Lớp này có sẵn từ Python 2.7 trở lên. OrderedDict sẽ trả về các phần tử khác nhau theo thứ tự xuất hiện của khóa.
Chúng ta hãy sử dụng một danh sách và phương thức fromkeys() có sẵn trong OrderedDict để lấy các phần tử duy nhất từ danh sách đó.
Để sử dụng phương thức OrderedDict.fromkeys(), bạn phải nhập OrderedDict từ collections, như được hiển thị bên dưới:
from collections import OrderedDict
Dưới đây là một ví dụ về cách loại bỏ các phần tử trùng lặp bằng phương thức OrderedDict.fromkeys().
Ví dụ
from collections import OrderedDict my_list = ['a','x','a','y','a','b','b','c'] my_final_list = OrderedDict.fromkeys(my_list) print(list(my_final_list))
Đầu ra:
['a', 'x', 'y', 'b', 'c']
Từ Python Từ phiên bản 3.5 trở đi, chúng ta có thể sử dụng phương thức dict.fromkeys() thông thường để lấy các phần tử khác nhau từ danh sách. Phương thức dict.fromkeys() trả về các khóa duy nhất và giúp loại bỏ các giá trị trùng lặp.
Ví dụ sau đây minh họa cách hoạt động của dict.fromkeys() trên một danh sách để trả về các phần tử duy nhất:
Ví dụ
my_list = ['a','x','a','y','a','b','b','c'] my_final_list = dict.fromkeys(my_list) print(list(my_final_list))
Đầu ra:
['a', 'x', 'y', 'b', 'c']
Cách 4) Sử dụng vòng lặp for
Sử dụng vòng lặp, chúng ta sẽ duyệt qua danh sách các mục để loại bỏ các mục trùng lặp.
Đầu tiên, khởi tạo mảng rỗng, tức là myFinallist = []. Bên trong vòng lặp for, hãy thêm điều kiện kiểm tra xem các phần tử trong danh sách có tồn tại trong mảng myFinallist hay không. Nếu các phần tử không tồn tại, hãy thêm phần tử đó vào mảng myFinallist bằng phương thức append().
Vì vậy, bất cứ khi nào gặp phải phần tử trùng lặp, nó sẽ đã có sẵn trong mảng myFinallist và sẽ không được chèn vào. Chúng ta hãy kiểm tra điều này trong ví dụ dưới đây:
Ví dụ
my_list = [1,2,2,3,1,4,5,1,2,6] myFinallist = [] for i in my_list: if i not in myFinallist: myFinallist.append(i) print(list(myFinallist))
Đầu ra:
[1, 2, 3, 4, 5, 6]
Phương pháp 5) Sử dụng tính năng hiểu danh sách
Danh sách hiểu là Python các hàm được sử dụng để tạo các chuỗi mới (chẳng hạn như danh sách, từ điển, v.v.) bằng cách sử dụng các chuỗi đã được tạo. Điều này giúp bạn giảm các vòng lặp dài hơn và làm cho mã của bạn dễ đọc và bảo trì hơn.
Chúng ta hãy sử dụng khả năng hiểu danh sách để loại bỏ các bản sao khỏi danh sách đã cho.
Ví dụ
my_list = [1,2,2,3,1,4,5,1,2,6] my_finallist = [] [my_finallist.append(n) for n in my_list if n not in my_finallist] print(my_finallist)
Đầu ra:
[1, 2, 3, 4, 5, 6]
Phương pháp 6) Sử dụng phương thức unique() của NumPy
Phương thức `unique()` từ mô-đun `NumPy` có thể giúp chúng ta loại bỏ các phần tử trùng lặp khỏi danh sách đã cho.
Để làm việc với NumPy, trước tiên hãy nhập mô-đun numpy:
Bước 1) Nhập mô-đun NumPy
import numpy as np
Bước 2) Sử dụng danh sách có chứa các phần tử trùng lặp bên trong phương thức `unique()`. Kết quả sẽ được chuyển đổi trở lại thành danh sách bằng phương thức `tolist()`.
myFinalList = np.unique(my_list).tolist()
Bước 3) Cuối cùng, in danh sách ra:
print(myFinalList)
Mã cuối cùng với đầu ra như sau:
import numpy as np my_list = [1,2,2,3,1,4,5,1,2,6] myFinalList = np.unique(my_list).tolist() print(myFinalList)
Đầu ra:
[1, 2, 3, 4, 5, 6]
Phương pháp 7) Sử dụng phương pháp Pandas
Mô-đun Pandas có phương thức Unique() sẽ cung cấp cho chúng ta các phần tử duy nhất từ danh sách đã cho.
Để làm việc với mô-đun Pandas:
Bước 1) Nhập mô-đun Pandas
import pandas as pd
Bước 2) Sử dụng danh sách có chứa các phần tử trùng lặp bên trong phương thức unique():
myFinalList = pd.unique(my_list).tolist()
Bước 3) In danh sách ra:
print(myFinalList)
Mã cuối cùng với đầu ra như sau:
import pandas as pd my_list = [1,2,2,3,1,4,5,1,2,6] myFinalList = pd.unique(my_list).tolist() print(myFinalList)
Đầu ra:
[1, 2, 3, 4, 5, 6]
Phương pháp 8) Sử dụng enumerate() và hiểu danh sách
Ở đây, chúng ta sử dụng sự kết hợp giữa list comprehension và enumerate() để loại bỏ các phần tử trùng lặp. Enumerate trả về một đối tượng với một bộ đếm cho mỗi phần tử trong danh sách. Ví dụ: (0,1), (1,2), v.v. Ở đây, giá trị đầu tiên là chỉ số, và giá trị thứ hai là phần tử trong danh sách.
Mỗi phần tử được kiểm tra xem có tồn tại trong danh sách hay không, và nếu có, nó sẽ bị xóa khỏi danh sách.
Ví dụ
my_list = [1,2,2,3,1,4,5,1,2,6] my_finallist = [i for j, i in enumerate(my_list) if i not in my_list[:j]] print(list(my_finallist))
Đầu ra:
[1, 2, 3, 4, 5, 6]
