Jak odstranit duplikáty ze seznamu v Python

⚡ Chytré shrnutí

Odstranění duplikátů z Python Seznam lze vytvořit pomocí několika vestavěných přístupů, včetně set(), dict.fromkeys(), cyklů, comprehensionů v seznamech a knihovních metod z NumPy a Pandas, přičemž každý z nich vyvažuje zachování pořadí a rychlost.

  • 🔘 Metoda nastavení: set() okamžitě vrací odlišné prvky, ale nezachovává původní pořadí v seznamu.
  • ☑️ Pořadí zachováno: dict.fromkeys() a OrderedDict odstraňují duplikáty, zatímco keeping první zobrazená objednávka vložení.
  • (Tj. Ruční ovládání: Smyčka for nebo seznam s kontrolou členství udržuje pořádek a zůstává čitelná.
  • 🧪 Metody knihovny: Metody NumPy unique() a Pandas unique() deduplikují data a vracejí výstup seznamu pomocí metody tolist().
  • 🛠️ Limit hašovatelnosti: Klíče set a dict vyžadují hašovatelné položky, takže seznamy nebo slovníky potřebují přístup založený na smyčce.
  • 🤖 Pracovní postupy umělé inteligence: Strojové učení deduplikuje trénovací data pomocí funkce Pandas drop_duplicates(), aby se zabránilo zkreslení a úniku dat.

Odstranění duplicit ze seznamu v Python

Python odstranit duplikáty ze seznamu

Seznam je kontejner, který obsahuje různé Python objekty, což mohou být celá čísla, slova, hodnoty atd. Je to ekvivalent pole v jiných programovacích jazycích.

Zde si tedy probereme různé způsoby, jak můžeme odstranit duplikáty z daného seznamu v Python.

Metoda 1) Odstraňte duplikáty ze seznamu pomocí Set

Pro odstranění duplikátů ze seznamu můžete použít vestavěnou funkci set(). Specialitou metody set() je, že vrací odlišné prvky.

Máme seznam: [1,1,2,3,2,2,4,5,6,2,1]. Seznam obsahuje mnoho duplikátů, které musíme odstranit a získat zpět pouze odlišné prvky. Seznam je předán vestavěné funkci set(). Later Konečný seznam se zobrazí pomocí vestavěné funkce list().

Výstupem, který dostaneme, jsou odlišné prvky, kde jsou všechny duplicitní prvky eliminovány.

Příklad

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

Výstup:

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

Metoda 2) Použití dočasného seznamu

Chcete-li z daného seznamu odstranit duplikáty, můžete použít prázdný dočasný seznam. Nejprve budete muset projít seznam s duplikáty a přidat jedinečné položky do dočasného seznamu. Later dočasný seznam je přiřazen k hlavnímu seznamu.

Příklad

Zde je funkční příklad s použitím dočasného seznamu.

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)

Výstup:

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

Metoda 3) Pomocí Dict

Duplikáty z daného seznamu můžeme odstranit importem OrderedDict z kolekcí. Je k dispozici od verze python 2.7. OrderedDict se postará o vrácení odlišných prvků v pořadí, v jakém je přítomen klíč.

Použijme seznam a metodu fromkeys() dostupnou v OrderedDict k získání unikátních prvků ze seznamu.

Abyste mohli použít metodu OrderedDict.fromkeys(), musíte importovat OrderedDict z kolekcí, jak je znázorněno níže:

from collections import OrderedDict

Zde je příklad odstranění duplicitních položek pomocí metody OrderedDict.fromkeys().

Příklad

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

Výstup:

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

od Python Od verze 3.5 a novější můžeme k získání jedinečných prvků ze seznamu použít běžnou metodu dict.fromkeys(). Metoda dict.fromkeys() vrací jedinečné klíče a pomáhá zbavit se duplicitních hodnot.

Příklad, který ukazuje fungování funkce dict.fromkeys() na seznamu pro zobrazení jedinečných položek, je následující:

Příklad

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

Výstup:

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

Metoda 4) Použití for-loop

Použití for-loop, projdeme seznam položek, abychom odstranili duplikáty.

Nejprve inicializujte pole na prázdné, tj. myFinallist = []. Uvnitř smyčky for přidejte kontrolu, zda položky ze seznamu existují v poli myFinallist. Pokud položky neexistují, přidejte je do pole myFinallist pomocí metody append().

Takže kdykoli se narazí na duplicitní položku, bude již přítomna v poli myFinallist a nebude vložena. Nyní se podívejme na totéž v níže uvedeném příkladu:

Příklad

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

Výstup:

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

Metoda 5) Použití porozumění seznamu

Seznam porozumění je Python funkce, které se používají pro vytváření nových sekvencí (jako jsou seznamy, slovníky atd.) pomocí sekvencí, které již byly vytvořeny. To vám pomůže omezit delší smyčky a usnadnit čtení a údržbu kódu.

Využijme porozumění seznamu k odstranění duplikátů z daného seznamu.

Příklad

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)

Výstup:

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

Metoda 6) Použití metody NumPy unique()

Metoda unique() z modulu NumPy nám může pomoci odstranit duplikáty ze zadaného seznamu.

Pro práci s NumPy nejprve importujte modul numpy:

Krok 1) Importovat modul NumPy

import numpy as np

Krok 2) Použijte svůj seznam s duplikáty uvnitř metody unique(). Výstup je převeden zpět do seznamu pomocí metody tolist().

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

Krok 3) Nakonec vytiskněte seznam:

print(myFinalList)

Konečný kód s výstupem je následující:

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

Výstup:

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

Metoda 7) Použití metod Pandas

Modul Pandas má metodu unique(), která nám poskytne jedinečné prvky z uvedeného seznamu.

Pro práci s modulem Pandas:

Krok 1) Import modulu Pandas

import pandas as pd

Krok 2) Použijte svůj seznam s duplikáty uvnitř metody unique():

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

Krok 3) Vytiskněte seznam:

print(myFinalList)

Konečný kód s výstupem je následující:

import pandas as pd

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

Výstup:

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

Metoda 8) Použití enumerate() a porozumění seznamu

Zde používáme kombinaci list comprehension a enumerate() k odstranění duplicitních prvků. Enumerate vrací objekt s čítačem pro každý prvek v seznamu. Například (0,1), (1,2) atd. První hodnota je zde index a druhá hodnota je položka seznamu.

Každý prvek je zkontrolován, zda v seznamu existuje, a pokud ano, je ze seznamu odstraněn.

Příklad

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

Výstup:

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

Nejčastější dotazy

Ne. Sada je neuspořádaná kolekce, takže set() může vracet prvky v jiném pořadí. Chcete-li odstranit duplikáty a zároveň zachovat pořadí, použijte dict.fromkeys() nebo smyčku, která připojí pouze položky, které ještě nebyly vidět.

Pro velké seznamy je set() nejrychlejší, když na pořadí nezáleží, protože kontroly členství jsou O(1). Když na pořadí záleží, je list(dict.fromkeys(my_list)) téměř stejně rychlý a uchovává pořadí podle prvního zobrazení v jednom řádku.

Funkce set() a dict.fromkeys() potřebují hašovatelné prvky, takže selhávají v seznamech nebo slovnících. Projděte seznam a přidejte položky, které ještě nebyly zobrazeny, nebo převeďte každou položku na n-tici nebo řetězec JSON jako dočasný klíč.

Použijte seznam(dict.fromkeys(my_list)). Protože Python Slovníky verze 3.7 zachovávají pořadí vkládání, takže klíče zůstávají v pořadí, v jakém se objevily. V dřívějších verzích použijte pro stejný výsledek funkci collections.OrderedDict.fromkeys().

Ne. Metody jako set(), dict.fromkeys(), comprehensions a NumPy nebo Pandas unique() vytvoří nový seznam a ponechají zdrojový kód beze změny. Pokud chcete výsledek přepsat, přiřaďte ho stejné proměnné.

Použijte numpy.unique() nebo pandas.unique() v případě, že data již existují v polích nebo sériích, nebo během analýzy dat. Poznámka: numpy.unique() také třídí hodnoty, zatímco pandas.unique() zachovává pořadí podle prvního zobrazení. Pro obyčejný seznam volejte tolist().

Strojové učení před trénováním odstraňuje duplicitní řádky, takže opakované vzorky nezpůsobují zkreslení modelu ani únik dat mezi trénovacími a testovacími sadami. Pandas drop_duplicates() je běžný nástroj pro čištění tabulkových datových sad.

Ano. GitHub Copilot a agentní AI asistenti generují z komentáře kód pro deduplikaci pomocí funkcí set(), dict.fromkeys() nebo Pandas, navrhují možnost zachování pořadí a refaktorují smyčky, i když byste stále měli ověřovat okrajové případy, jako jsou nehašovatelné položky.

Shrňte tento příspěvek takto: