Cách xóa danh sách trùng lặp khỏi danh sách trong Python

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ì vậy, ở đây sẽ trình bày các cách khác nhau để chúng ta có thể xóa các bản sao khỏi một danh sách nhất định trong Python.

Phương pháp 1) Xóa các bản sao khỏi danh sách bằng Set

Để xóa các bản sao khỏi danh sách, bạn có thể sử dụng chức năng tích hợp sẵn set(). Điểm đặc biệt của phương thức set() là nó trả về các phần tử riêng biệt.

Chúng tôi có một danh sách: [1,1,2,3,2,2,4,5,6,2,1]. Danh sách có nhiều bản sao mà chúng ta cần loại bỏ và chỉ lấy lại các phần tử riêng biệt. Danh sách được trao cho set() chức năng tích hợp. Later danh sách cuối cùng được hiển thị bằng cách sử dụng list() chức năng tích hợp sẵn, như trong ví dụ dưới đây.


Đầu ra mà chúng tôi 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 đều bị 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 bản sao từ một list, bạn có thể sử dụng danh sách tạm thời trống. Trước tiên, bạn sẽ phải duyệt qua danh sách có các mục trùng lặp và thêm các mục 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ụ
Đây là một ví dụ hoạt động 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 tôi có thể xóa các bản sao khỏi danh sách đã cho bằng cách nhập OrderedDict từ các bộ sưu tập. Nó có sẵn từ python2.7 trở đi. OrderedDict đảm nhiệm việc trả lại cho bạn các phần tử riêng biệt theo thứ tự có khóa.

Chúng ta hãy sử dụng một danh sách và sử dụng fromkeys() phương thức có sẵn trong OrderedDict để lấy các phần tử duy nhất từ ​​danh sách.

Tận dụng OrderedDict.fromkey() phương pháp này, bạn phải nhập OrderedDict từ các bộ sưu tập, như hiển thị bên dưới:

from collections import OrderedDict

Đây là một ví dụ để loại bỏ trùng lặp bằng cách sử dụng OrderedDict.fromkeys() phương pháp.

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 3.5+ trở đi, chúng ta có thể sử dụng thông thường dict.fromkeys() để có được các phần tử riêng biệt từ danh sách. Các dict.fromkeys() các phương thức trả về các khóa duy nhất và giúp loại bỏ các giá trị trùng lặp.

Một ví dụ cho thấy hoạt động của dict.fromkeys() trong danh sách để cung cấp các mục duy nhất như sau:

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 trống tức là myFinallist = [].Bên trong vòng lặp for, thêm kiểm tra xem các mục trong danh sách có tồn tại trong mảng không myFinallist. Nếu các mục không tồn tại, hãy thêm mục đó vào mảng myFinallist bằng cách sử dụng append() phương pháp.

Vì vậy, bất cứ khi nào gặp mục trùng lặp, nó sẽ có sẵn trong mảng myFinallist và sẽ không được chèn vào. Bây giờ chúng ta hãy kiểm tra điều tương tự 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 Numpy Unique().

Phương pháp này unique() từ mô-đun Numpy có thể giúp chúng tôi xóa bản sao khỏi danh sách đã cho.

Để làm việc với mô-đun numpy nhập đầu tiên của Numpy, bạn cần làm theo các bước sau:

Bước 1) Nhập mô-đun Numpy

import numpy as np

Bước 2) Sử dụng danh sách của bạn với các bản sao bên trong phương thức duy nhất như hiển thị bên dưới. Đầu ra được chuyển đổi trở lại định dạng danh sách bằng cách sử dụng tolist() phương pháp.

myFinalList = np.unique(my_list).tolist()

Bước 3) Cuối cùng in danh sách như hình dưới đây:

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ó unique() phương thức 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ạn cần làm theo các bước sau:

Bước 1) Nhập mô-đun Pandas

import pandas as pd

Bước 2) Sử dụng danh sách của bạn với các bản sao bên trong unique() phương pháp như hình dưới đây:

myFinalList = pd.unique(my_list).tolist()

Bước 3) In danh sách như hình dưới đây:

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 là sự kết hợp giữa hiểu danh sách và liệt kê để loại bỏ các phần tử trùng lặp. Enumerate trả về một đối tượng có bộ đếm cho từng phần tử trong danh sách. Ví dụ (0,1), (1,2), v.v. Ở đây giá trị đầu tiên là chỉ mục và giá trị thứ hai là mục danh sách. W

Mỗi phần tử được kiểm tra xem nó 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]

Tổng kết

  • Để xóa các bản sao khỏi danh sách, bạn có thể sử dụng chức năng tích hợp sẵn set(). Đặc sản của set() phương pháp là nó trả về các phần tử riêng biệt.
  • Bạn có thể xóa các bản sao khỏi danh sách đã cho bằng cách nhập OrderedDictfrom các bộ sưu tập. Nó có sẵn từ python2.7 trở đi. OrderedDictdict đảm nhiệm việc trả lại cho bạn các phần tử riêng biệt theo thứ tự có khóa.
  • Bạn có thể sử dụng vòng lặp for để duyệt qua danh sách các mục để loại bỏ các mục trùng lặp.
  • Phương pháp này unique() từ mô-đun Numpy có thể giúp chúng tôi xóa bản sao khỏi danh sách đã cho.
  • Mô-đun Pandas có unique() phương thức sẽ cung cấp cho chúng ta các phần tử duy nhất từ ​​danh sách đã cho.
  • Sự kết hợp giữa hiểu danh sách và liệt kê được sử dụng để loại bỏ các phần tử trùng lặp khỏi danh sách. Enumerate trả về một đối tượng có bộ đếm cho từng phần tử trong danh sách.