Πώς να αφαιρέσετε διπλότυπα από μια λίστα Python

⚡ Έξυπνη Σύνοψη

Αφαίρεση διπλότυπων από ένα Python Η δημιουργία λίστας μπορεί να γίνει με διάφορες ενσωματωμένες προσεγγίσεις, όπως οι set(), dict.fromkeys(), οι βρόχοι, οι κατανοήσεις λίστας και οι μέθοδοι βιβλιοθήκης από τις NumPy και Pandas, με κάθε μία να εξισορροπεί τη διατήρηση της σειράς με την ταχύτητα.

  • 🔘 Ορισμός μεθόδου: Η set() επιστρέφει διακριτά στοιχεία αμέσως αλλά δεν διατηρεί την αρχική σειρά της λίστας.
  • ☑️ Η σειρά διατηρήθηκε: Οι συναρτήσεις dict.fromkeys() και OrderedDict αφαιρούν διπλότυπα ενώ διατηρούνταιping η πρώτη σειρά εισαγωγής που εμφανίζεται.
  • Χειροκίνητος έλεγχος: Μια κατανόηση βρόχου for ή λίστας με έλεγχο μελών διατηρεί την τάξη και παραμένει ευανάγνωστη.
  • 🧪 Μέθοδοι βιβλιοθήκης: Οι NumPy unique() και Pandas unique() απαλοιφαίνουν τα διπλότυπα δεδομένων και επιστρέφουν έξοδο λίστας μέσω της μεθόδου tolist().
  • Όριο δυνατότητας κατακερματισμού: Τα κλειδιά set και dict απαιτούν hashable στοιχεία, επομένως οι λίστες ή τα λεξικά χρειάζονται μια προσέγγιση που βασίζεται σε βρόχους.
  • 🤖 Ροές εργασίας τεχνητής νοημοσύνης: Οι αγωγοί μηχανικής μάθησης αποδιπλοποιούν τα δεδομένα εκπαίδευσης με την Pandas drop_duplicates() για την αποφυγή μεροληψίας και διαρροής δεδομένων.

Αφαίρεση διπλότυπων από μια λίστα στο Python

Python αφαιρέστε τα διπλότυπα από μια λίστα

Μια λίστα είναι ένα κοντέινερ που περιέχει διαφορετικά Python αντικείμενα, τα οποία θα μπορούσαν να είναι ακέραιοι, λέξεις, τιμές κ.λπ. Είναι το ισοδύναμο ενός πίνακα σε άλλες γλώσσες προγραμματισμού.

Εδώ λοιπόν θα δούμε διαφορετικούς τρόπους με τους οποίους μπορούμε να αφαιρέσουμε διπλότυπα από μια δεδομένη λίστα Python.

Μέθοδος 1) Καταργήστε τα διπλότυπα από τη λίστα χρησιμοποιώντας το Set

Για να αφαιρέσετε τα διπλότυπα από μια λίστα, μπορείτε να χρησιμοποιήσετε την ενσωματωμένη συνάρτηση set(). Η ιδιαιτερότητα της μεθόδου set() είναι ότι επιστρέφει διακριτά στοιχεία.

Έχουμε μια λίστα: [1,1,2,3,2,2,4,5,6,2,1]. Η λίστα έχει πολλά διπλότυπα τα οποία πρέπει να αφαιρέσουμε και να λάβουμε πίσω μόνο τα διακριτά στοιχεία. Η λίστα δίνεται στην ενσωματωμένη συνάρτηση set(). Later Η τελική λίστα εμφανίζεται χρησιμοποιώντας την ενσωματωμένη συνάρτηση list().

Η έξοδος που λαμβάνουμε είναι διακριτά στοιχεία όπου όλα τα διπλότυπα στοιχεία εξαλείφονται.

Παράδειγμα

my_list = [1,1,2,3,2,2,4,5,6,2,1]
my_final_list = set(my_list)
print(list(my_final_list))

Παραγωγή:

[1, 2, 3, 4, 5, 6]

Μέθοδος 2) Χρήση της Προσωρινής Λίστας

Για να αφαιρέσετε διπλότυπα από μια δεδομένη λίστα, μπορείτε να χρησιμοποιήσετε μια κενή προσωρινή λίστα. Για αυτό, θα πρέπει πρώτα να κάνετε επανάληψη στη λίστα που περιέχει διπλότυπα και να προσθέσετε τα μοναδικά στοιχεία στην προσωρινή λίστα. Later η προσωρινή λίστα εκχωρείται στην κύρια λίστα.

Παράδειγμα

Ακολουθεί ένα λειτουργικό παράδειγμα χρησιμοποιώντας μια προσωρινή λίστα.

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)

Παραγωγή:

List Before  [1, 2, 3, 1, 2, 4, 5, 4, 6, 2]
List After removing duplicates  [1, 2, 3, 4, 5, 6]

Μέθοδος 3) Χρήση Dict

Μπορούμε να αφαιρέσουμε διπλότυπα από τη δεδομένη λίστα εισάγοντας το OrderedDict από συλλογές. Είναι διαθέσιμο από την έκδοση python2.7 και μετά. Το OrderedDict φροντίζει να σας επιστρέψει τα διακριτά στοιχεία με τη σειρά που υπάρχει το κλειδί.

Ας χρησιμοποιήσουμε μια λίστα και ας χρησιμοποιήσουμε τη μέθοδο fromkeys() που είναι διαθέσιμη στο OrderedDict για να λάβουμε τα μοναδικά στοιχεία από τη λίστα.

Για να χρησιμοποιήσετε τη μέθοδο OrderedDict.fromkeys(), πρέπει να εισαγάγετε το OrderedDict από συλλογές, όπως φαίνεται παρακάτω:

from collections import OrderedDict

Ακολουθεί ένα παράδειγμα για την αφαίρεση διπλότυπων χρησιμοποιώντας τη μέθοδο OrderedDict.fromkeys().

Παράδειγμα

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))

Παραγωγή:

['a', 'x', 'y', 'b', 'c']

Από Python Από την έκδοση 3.5+ και μετά, μπορούμε να χρησιμοποιήσουμε την κανονική συνάρτηση dict.fromkeys() για να λάβουμε τα διακριτά στοιχεία από τη λίστα. Η μέθοδος dict.fromkeys() επιστρέφει μοναδικά κλειδιά και βοηθά στην απαλλαγή από τις διπλότυπες τιμές.

Ένα παράδειγμα που δείχνει τη λειτουργία της συνάρτησης dict.fromkeys() σε μια λίστα για να δώσει τα μοναδικά στοιχεία έχει ως εξής:

Παράδειγμα

my_list = ['a','x','a','y','a','b','b','c']
my_final_list = dict.fromkeys(my_list)
print(list(my_final_list))

Παραγωγή:

['a', 'x', 'y', 'b', 'c']

Μέθοδος 4) Χρήση for-loop

Χρησιμοποιώντας για βρόχο, θα διασχίσουμε τη λίστα των στοιχείων για να αφαιρέσουμε τα διπλότυπα.

Αρχικά, αρχικοποιήστε τον πίνακα σε κενό, π.χ. myFinallist = []. Μέσα στον βρόχο for, προσθέστε έναν έλεγχο για το αν τα στοιχεία της λίστας υπάρχουν στον πίνακα myFinallist. Εάν τα στοιχεία δεν υπάρχουν, προσθέστε το στοιχείο στον πίνακα myFinallist χρησιμοποιώντας τη μέθοδο append().

Έτσι, κάθε φορά που συναντάται το διπλότυπο στοιχείο, θα υπάρχει ήδη στον πίνακα myFinallist και δεν θα εισάγεται. Ας ελέγξουμε τώρα το ίδιο στο παρακάτω παράδειγμα:

Παράδειγμα

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))

Παραγωγή:

[1, 2, 3, 4, 5, 6]

Μέθοδος 5) Χρήση της κατανόησης λίστας

Κατανοήσεις λίστας είναι Python συναρτήσεις που χρησιμοποιούνται για τη δημιουργία νέων ακολουθιών (όπως λίστες, λεξικά κ.λπ.) χρησιμοποιώντας ακολουθίες που έχουν ήδη δημιουργηθεί. Αυτό σας βοηθά να μειώσετε τους μεγαλύτερους βρόχους και να κάνετε τον κώδικά σας ευκολότερο στην ανάγνωση και τη συντήρηση.

Ας χρησιμοποιήσουμε την κατανόηση λίστας για να αφαιρέσουμε τα διπλότυπα από τη λίστα που δίνεται.

Παράδειγμα

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)

Παραγωγή:

[1, 2, 3, 4, 5, 6]

Μέθοδος 6) Χρήση της μεθόδου NumPy unique()

Η μέθοδος unique() από την ενότητα NumPy μπορεί να μας βοηθήσει να αφαιρέσουμε διπλότυπα από τη λίστα που δίνεται.

Για να εργαστείτε με το NumPy, εισαγάγετε πρώτα τη λειτουργική μονάδα numpy:

Βήμα 1) Εισαγωγή ενότητας NumPy

import numpy as np

Βήμα 2) Χρησιμοποιήστε τη λίστα σας με διπλότυπα μέσα στη μέθοδο unique(). Η έξοδος μετατρέπεται ξανά σε λίστα χρησιμοποιώντας τη μέθοδο tolist().

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

Βήμα 3) Τέλος, εκτυπώστε τη λίστα:

print(myFinalList)

Ο τελικός κωδικός με έξοδο είναι ο εξής:

import numpy as np
my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = np.unique(my_list).tolist()
print(myFinalList)

Παραγωγή:

[1, 2, 3, 4, 5, 6]

Μέθοδος 7) Χρήση μεθόδων Pandas

Η ενότητα Pandas έχει μια μέθοδο unique() που θα μας δώσει τα μοναδικά στοιχεία από τη λίστα που δίνεται.

Για να εργαστείτε με την ενότητα Pandas:

Βήμα 1) Εισαγωγή μονάδας Pandas

import pandas as pd

Βήμα 2) Χρησιμοποιήστε τη λίστα σας με διπλότυπα μέσα στη μέθοδο unique():

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

Βήμα 3) Εκτυπώστε τη λίστα:

print(myFinalList)

Ο τελικός κωδικός με έξοδο είναι ο εξής:

import pandas as pd

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = pd.unique(my_list).tolist()
print(myFinalList)

Παραγωγή:

[1, 2, 3, 4, 5, 6]

Μέθοδος 8) Χρησιμοποιώντας την enumerate() και την κατανόηση λίστας

Εδώ χρησιμοποιούμε τον συνδυασμό κατανόησης λίστας και enumerate() για να αφαιρέσουμε τα διπλότυπα στοιχεία. Η Enumerate επιστρέφει ένα αντικείμενο με έναν μετρητή για κάθε στοιχείο της λίστας. Για παράδειγμα (0,1), (1,2) κ.λπ. Εδώ η πρώτη τιμή είναι ο δείκτης και η δεύτερη τιμή είναι το στοιχείο της λίστας.

Κάθε στοιχείο ελέγχεται για να διαπιστωθεί εάν υπάρχει στη λίστα και, εάν υπάρχει, αφαιρείται από τη λίστα.

Παράδειγμα

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))

Παραγωγή:

[1, 2, 3, 4, 5, 6]

Συχνές Ερωτήσεις

Όχι. Ένα σύνολο είναι μια μη ταξινομημένη συλλογή, επομένως η συνάρτηση set() μπορεί να επιστρέψει στοιχεία με διαφορετική σειρά. Για να αφαιρέσετε διπλότυπα διατηρώντας παράλληλα τη σειρά, χρησιμοποιήστε τη συνάρτηση dict.fromkeys() ή έναν βρόχο που προσθέτει μόνο στοιχεία που δεν έχουν ήδη εμφανιστεί.

Για μεγάλες λίστες, η set() είναι η ταχύτερη όταν η σειρά δεν έχει σημασία, επειδή οι έλεγχοι συμμετοχής είναι O(1). Όταν η σειρά έχει σημασία, η list(dict.fromkeys(my_list)) είναι σχεδόν εξίσου γρήγορη και διατηρεί τη σειρά που εμφανίζεται πρώτη σε μία γραμμή.

Οι συναρτήσεις set() και dict.fromkeys() χρειάζονται στοιχεία που μπορούν να κατακερματιστούν, επομένως αποτυγχάνουν σε λίστες ή λεξικά. Πραγματοποιήστε επανάληψη στη λίστα και προσθέστε στοιχεία που δεν εμφανίζονται ήδη ή μετατρέψτε κάθε στοιχείο σε πλειάδα ή συμβολοσειρά JSON ως προσωρινό κλειδί.

Χρησιμοποιήστε τη συνάρτηση list(dict.fromkeys(my_list)). Από τότε Python Τα λεξικά 3.7 διατηρούν τη σειρά εισαγωγής, επομένως τα κλειδιά παραμένουν στη σειρά που εμφανίστηκαν πρώτα. Σε παλαιότερες εκδόσεις, χρησιμοποιήστε τη συνάρτηση collections.OrderedDict.fromkeys() για το ίδιο αποτέλεσμα.

Όχι. Μέθοδοι όπως set(), dict.fromkeys(), comprehensions και NumPy ή Pandas unique() δημιουργούν μια νέα λίστα και αφήνουν την πηγή αμετάβλητη. Επαναπροσδιορίστε το αποτέλεσμα στην ίδια μεταβλητή εάν θέλετε να την αντικαταστήσετε.

Χρησιμοποιήστε numpy.unique() ή pandas.unique() όταν τα δεδομένα βρίσκονται ήδη σε πίνακες ή σε μια σειρά ή κατά την ανάλυση δεδομένων. Σημειώστε ότι η numpy.unique() ταξινομεί επίσης τις τιμές, ενώ η pandas.unique() διατηρεί τη σειρά εμφάνισης πρώτης επιλογής. Καλέστε την tolist() για μια απλή λίστα.

Οι αγωγοί μηχανικής μάθησης απορρίπτουν διπλότυπες γραμμές πριν από την εκπαίδευση, έτσι ώστε τα επαναλαμβανόμενα δείγματα να μην προκαλούν προκατάληψη στο μοντέλο ή διαρροή μεταξύ της εκπαίδευσης και των συνόλων δοκιμών. Η drop_duplicates() του Pandas είναι το κοινό εργαλείο για τον καθαρισμό συνόλων δεδομένων σε μορφή πίνακα.

Ναι. Το GitHub Copilot και οι βοηθοί τεχνητής νοημοσύνης δημιουργούν κώδικα set(), dict.fromkeys() ή Pandas deduplication από ένα σχόλιο, προτείνουν την επιλογή διατήρησης της σειράς και επαναπροσδιορίζουν τους βρόχους, αν και θα πρέπει να επαληθεύετε περιπτώσεις edge όπως τα μη κατακερματιζόμενα στοιχεία.

Συνοψίστε αυτήν την ανάρτηση με: