V programiranju Python je primerjava dveh seznamov pogosta naloga z več pristopi. Ta članek raziskuje različne metode za ugotavljanje razlik med dvema seznamoma, izboljšanje vaše usposobljenosti za ravnanje s seznami in primerjavo podatkov v Python . Pridružite se nam na tem pronicljivem potovanju v različne strategije za zaznavanje razlik med seznami.
Primer
Input: list1 = [10, 15, 20, 25, 30, 35, 40] list2 = [25, 40, 35] Output: [10, 15, 20, 30] Explanation: resultant list = list1 - list2>
Opomba: Če imate več enakih elementov, to ne bo delovalo. V tem primeru bo ta koda preprosto odstranila iste elemente.
V tem primeru lahko vzdržujete število vsakega elementa na obeh seznamih.
Načini primerjave dveh seznamov v Pythonu
Obstaja več načinov za primerjavo dveh seznamov v Pythonu. Tukaj razpravljamo o nekaterih splošno uporabljenih metodah za primerjavo dveh seznamov v Pythonu, ki sledijo.
- Uporabite v metodi
- Uporaba seznamskega razumevanja
- Uporaba set() funkcija
- Uporaba Numpy
- Uporaba zip() funkcija
- Štetje pojavitev z uporabo števec
Python v ključni besedi za primerjavo dveh seznamov v Pythonu
V tem primeru koda ponavlja elemente na seznamu »li1« in doda vsak element v »temp3«, če ni na seznamu »li2«. Končni rezultat v »temp3« vsebuje elemente iz »li1«, ki niso prisotni 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)> |
>
>
Izhod
[10, 15, 20, 30]>
Razlika med dvema seznamoma v Pythonu z uporabo razumevanja seznama
V tem primeru koda ustvari niz 's' iz elementov seznama 'li2' in nato ustvari nov seznam 'temp3', ki vsebuje elemente s seznama 'li1', ki niso prisotni v nizu 's'. Na koncu natisne elemente 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)> |
>
>
Izhod
[10, 15, 20, 30]>
Poiščite razliko med dvema seznamoma v Pythonu z uporabo set()
Pri tej metodi sezname eksplicitno pretvorimo v nabore in nato preprosto zmanjšamo enega od drugega z uporabo operatorja odštevanja. Za več referenc na setu obiščite Nastavi v Pythonu . Gre za podobno tehniko, ki smo jo uporabljali prej. Edina razlika je, da smo ugnezdene zanke zamenjali z razumevanje seznama sintaksa.
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)> |
>
>
Izhod
[10, 15, 20, 30]>
Uporabite Numpy za Primerjajte dva seznama v Pythonu
The numpy.concatenate() funkcija združi zaporedje nizov vzdolž obstoječe osi. V tem primeru koda uporablja NumPy za ustvarjanje nizov `li1` in `li2`, najde nastavljene razlike med njima (`dif1` in `dif2`) in združi te razlike v en sam seznam (`temp3`), na koncu pa natisne rezultat.
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))> |
>
>
Izhod
[10, 15, 20, 30]>
Primerjajte dva seznama v Pythonu s funkcijo zip().
V tem primeru koda primerja ustrezne elemente dveh seznamov, li1 in li2, in ustvari seznam logičnih vrednosti, ki kažejo, ali sta elementa enaka. Funkcija `all` preveri, ali so vsi elementi na seznamu rezultatov True.
Python3
li1>=> [>10>,>15>,>20>]> li2>=> [>25>,>40>,>35>]> result>=> [a>=>=> b>for> a, b>in> zip>(li1, li2)]> print>(>all>(result))> |
>
>
Izhod
False>
Primerjajte dva seznama s štetjem pojavitev s števcem
V tem primeru koda uporablja razred »Števec« iz modula »zbirke« za ustvarjanje frekvenčnih števcev za dva seznama, »li1« in »li2«. Nato primerja števce, da preveri, ali imajo seznami enake elemente z enakimi frekvencami, pri čemer rezultat dodeli `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)> |
bfs iskanje
>
>
Izhod
False>