Python | Rozdíl mezi dvěma seznamy
V programování v Pythonu je porovnávání dvou seznamů běžným úkolem s více přístupy. Tento článek se zabývá různými metodami, jak získat odlišnost mezi dvěma seznamy, a zlepšit tak vaši odbornost při práci se seznamy a porovnávání dat v Krajta . Připojte se k nám na této poutavé cestě do různých strategií pro rozpoznání rozdílů mezi seznamy.
Příklad
Input: list1 = [10, 15, 20, 25, 30, 35, 40] list2 = [25, 40, 35] Output: [10, 15, 20, 30] Explanation: resultant list = list1 - list2
Poznámka: Když máte více stejných prvků, pak by to nefungovalo. V takovém případě tento kód jednoduše odstraní stejné prvky.
V takovém případě můžete udržovat počet každého prvku v obou seznamech.
Způsoby porovnání dvou seznamů v Pythonu
Existují různé způsoby, jak porovnat dva seznamy v Pythonu. Zde diskutujeme o některých obecně používaných metodách pro porovnávání dvou seznamů v Pythonu, které následují.
- Použití v metodě
- Používání funkce List Comprehension
- Použití soubor() Funkce
- Použití Numpy
- Použitím zip() Funkce
- Počítejte výskyty pomocí Čelit
Python v klíčovém slově pro porovnání dvou seznamů v Pythonu
V tomto příkladu kód iteruje prvky v seznamu `li1` a každý prvek připojuje k `temp3`, pokud není přítomen v seznamu `li2`. Konečný výsledek v `temp3` obsahuje prvky z `li1`, které nejsou přítomné v `li2`.
Python3
li1> => [> 10> ,> 15> ,> 20> ,> 25> ,> 30> ,> 35> ,> 40> ]> li2> => [> 25> ,> 40> ,> 35> ]> temp3> => []> for> element> in> li1:> > if> element> not> in> li2:> > temp3.append(element)> print> (temp3)> |
Výstup
[10, 15, 20, 30]
Rozdíl mezi dvěma seznamy v Pythonu pomocí porozumění seznamu
V tomto příkladu kód vytvoří sadu ‚s‘ z prvků seznamu ‚li2‘ a poté vygeneruje nový seznam ‚temp3‘ obsahující prvky ze seznamu ‚li1‘, které nejsou přítomny v sadě ‚s‘. Nakonec vytiskne prvky v „temp3“.
Python3
li1> => [> 10> ,> 15> ,> 20> ,> 25> ,> 30> ,> 35> ,> 40> ]> li2> => [> 25> ,> 40> ,> 35> ]> s> => set> (li2)> temp3> => [x> for> x> in> li1> if> x> not> in> s]> print> (temp3)> |
Výstup
[10, 15, 20, 30]
Najděte rozdíl mezi dvěma seznamy v Pythonu pomocí set()
V této metodě převedeme seznamy na množiny explicitně a pak jednoduše jeden od druhého redukujeme pomocí operátoru odečítání. Pro více referencí na návštěvě Sady v Pythonu . Je to podobná technika, kterou jsme používali dříve. Jediný rozdíl je v tom, že jsme nahradili vnořené smyčky za porozumění seznamu syntax.
Python3
li1> => [> 10> ,> 15> ,> 20> ,> 25> ,> 30> ,> 35> ,> 40> ]> li2> => [> 25> ,> 40> ,> 35> ]> s> => set> (li2)> temp3> => [x> for> x> in> li1> if> x> not> in> s]> print> (temp3)> |
Výstup
[10, 15, 20, 30]
Použijte k tomu Numpy Porovnejte dva seznamy v Pythonu
The numpy.concatenate() funkce zřetězit posloupnost polí podél existující osy. V tomto příkladu kód používá NumPy k vytvoření polí `li1` a `li2`, najde nastavené rozdíly mezi nimi (`dif1` a `dif2`) a zřetězí tyto rozdíly do jednoho seznamu (`temp3`), přičemž nakonec vytiskne výsledek.
Python3
import> numpy as np> li1> => np.array([> 10> ,> 15> ,> 20> ,> 25> ,> 30> ,> 35> ,> 40> ])> li2> => np.array([> 25> ,> 40> ,> 35> ])> dif1> => np.setdiff1d(li1, li2)> dif2> => np.setdiff1d(li2, li1)> temp3> => np.concatenate((dif1, dif2))> print> (> list> (temp3))> |
Výstup
[10, 15, 20, 30]
Porovnejte dva seznamy v Pythonu pomocí funkce zip().
V tomto příkladu kód porovnává odpovídající prvky dvou seznamů, li1 a li2, a vytváří seznam booleovských hodnot označujících, zda jsou prvky stejné. Funkce `all` kontroluje, zda jsou všechny prvky ve výsledkovém seznamu pravdivé.
Python3
li1> => [> 10> ,> 15> ,> 20> ]> li2> => [> 25> ,> 40> ,> 35> ]> result> => [a> => => b> for> a, b> in> zip> (li1, li2)]> print> (> all> (result))> |
Výstup
False
Porovnejte dva seznamy pomocí počítání výskytů pomocí počitadla
V tomto příkladu kód používá třídu `Counter` z modulu `collections` k vytvoření frekvenčních čítačů pro dva seznamy, `li1` a `li2`. Poté porovná počítadla, aby zkontroloval, zda seznamy obsahují stejné prvky se stejnou frekvencí, a výsledek přiřadí `are_lists_equal`.
Python3
from> collections> import> Counter> li1> => [> 10> ,> 15> ,> 20> ,> 25> ,> 30> ,> 35> ,> 40> ]> li2> => [> 25> ,> 40> ,> 35> ]> counter1> => Counter(li1)> counter2> => Counter(li2)> are_lists_equal> => counter1> => => counter2> print> (are_lists_equal)> |
Výstup
False