
Có nhiều cách để xóa phần tử trùng lặp khỏi Python List.
- Sử dụng một Temporary List và lặp (Looping)
- Sử dụng phương thức dựng sẵn
set() - Sử dụng các khóa (Keys) của Dictionary
- Sử dụng hàm
count()của List - List Comprehension
Xóa các phần tử trùng lặp khỏi Python List
Python list có thể chứa các phần tử trùng lặp. Hãy cùng xem các ví dụ về cách xóa các phần tử trùng lặp theo những cách khác nhau.
1. Sử dụng Temporary List
Đây là cách thô sơ để xóa các phần tử trùng lặp khỏi một list. Chúng ta sẽ tạo một temporary list (list tạm thời) và chỉ thêm các phần tử vào đó nếu nó chưa tồn tại.
ints_list = [1, 2, 3, 4, 3, 2]
temp = []
for x in ints_list:
if x not in temp:
temp.append(x)
ints_list = temp
print(f'Updated List after removing duplicates = {temp}')
Output: Updated List after removing duplicates = [1, 2, 3, 4]
2. Sử dụng hàm set()
Python set không chứa các phần tử trùng lặp. Chúng ta có thể sử dụng hàm dựng sẵn set() để chuyển đổi list thành một set, sau đó sử dụng hàm list() để chuyển đổi nó trở lại thành list.
ints_list = [1, 2, 3, 4, 3, 2]
ints_list1 = list(set(ints_list))
print(ints_list1) # [1, 2, 3, 4]
3. Sử dụng các phần tử List làm Dictionary Keys
Chúng ta biết rằng các khóa của dictionary là duy nhất. Lớp dict có hàm fromkeys() chấp nhận một iterable để tạo dictionary với các khóa từ iterable.
ints_list = [1, 2, 3, 4, 3, 2]
ints_list2 = list(dict.fromkeys(ints_list))
print(ints_list2) # [1, 2, 3, 4]
4. Sử dụng hàm count() của List – Không được khuyến khích
Phương thức count() của list trả về số lần xuất hiện của giá trị. Chúng ta có thể sử dụng nó với phương thức remove() để loại bỏ các phần tử trùng lặp khỏi list.
ints_list = [1, 2, 3, 4, 3, 2]
for x in ints_list:
if ints_list.count(x) > 1:
ints_list.remove(x)
print(ints_list) # [1, 2, 3, 4]
LƯU Ý: Như đã chỉ ra trong bình luận dưới đây, việc sử dụng hàm count() không được khuyến khích khi xóa phần tử từ cùng một iterator vì nó có thể dẫn đến kết quả không mong muốn. Ví dụ:
values = [87, 94, 45, 94, 94, 41, 65, 94, 41, 99, 94, 94, 94]
for x in values:
if values.count(x) > 1:
values.remove(x)
print(values) # [87, 45, 65, 41, 99, 94, 94] - 94 is still present twice
5. List Comprehension
Chúng ta có thể tạo một list từ một iterable bằng cách sử dụng List Comprehension. Kỹ thuật này giống như việc sử dụng temporary list và for loop để xóa các phần tử trùng lặp. Tuy nhiên, nó giúp giảm số dòng code.
int_list = [1, 2, 3, 4, 3, 2]
temp = []
[temp.append(x) for x in ints_list if x not in temp]
print(temp) # [1, 2, 3, 4]
Cách tốt nhất để xóa các phần tử trùng lặp khỏi một List
Nếu bạn không muốn có các phần tử trùng lặp, bạn nên sử dụng Set. Nhưng nếu bạn phải xóa các giá trị trùng lặp từ một list, thì tôi sẽ ưu tiên sử dụng hàm count() vì nó không tạo ra một temporary set hoặc list object khác. Do đó, nó hiệu quả hơn về mặt bộ nhớ (memory efficient).