logo

Python | Priesečník dvoch zoznamov

Priesečník dvoch zoznamov znamená, že musíme vziať všetky prvky, ktoré sú spoločné pre oba počiatočné zoznamy, a uložiť ich do iného zoznamu. Teraz existujú v Pythone rôzne spôsoby, pomocou ktorých môžeme vykonať prienik zoznamov.
Príklady:

Input : lst1 = [15, 9, 10, 56, 23, 78, 5, 4, 9] lst2 = [9, 4, 5, 36, 47, 26, 10, 45, 87] Output : [9, 10, 4, 5] Input : lst1 = [4, 9, 1, 17, 11, 26, 28, 54, 69] lst2 = [9, 9, 74, 21, 45, 11, 63, 28, 26] Output : [9, 11, 26, 28]>

Metóda 1:
Toto je najjednoduchšia metóda, pri ktorej sme nepoužili žiadne vstavané funkcie.



Python3




čo znamená xdxd



# Python program to illustrate the intersection> # of two lists in most simple way> def> intersection(lst1, lst2):> >lst3>=> [value>for> value>in> lst1>if> value>in> lst2]> >return> lst3> # Driver Code> lst1>=> [>4>,>9>,>1>,>17>,>11>,>26>,>28>,>54>,>69>]> lst2>=> [>9>,>9>,>74>,>21>,>45>,>11>,>63>,>28>,>26>]> print>(intersection(lst1, lst2))>



>

>

Výkon:

[9, 11, 26, 28]>

Metóda 2:
Táto metóda zahŕňa použitie metóda set(). .

Python3




# Python program to illustrate the intersection> # of two lists using set() method> def> intersection(lst1, lst2):> >return> list>(>set>(lst1) &>set>(lst2))> # Driver Code> lst1>=> [>15>,>9>,>10>,>56>,>23>,>78>,>5>,>4>,>9>]> lst2>=> [>9>,>4>,>5>,>36>,>47>,>26>,>10>,>45>,>87>]> print>(intersection(lst1, lst2))>

>

>

Výkon:

[9, 10, 4, 5]>

Časová zložitosť vyššie uvedeného programu je O(n), kde n je dĺžka dlhšieho zoznamu medzi lst1 a lst2.

Priestorová zložitosť programu je O(n), kde n je dĺžka menšieho zoznamu medzi lst1 a lst2.

Metóda 3:
Pri tejto metóde sme set() väčší zoznam a potom použite vstavanú funkciu tzv križovatka() na výpočet pretínajúceho sa zoznamu. križovatka() je prvotriednou súčasťou súpravy.

Python3




# Python program to illustrate the intersection> # of two lists using set() and intersection()> def> Intersection(lst1, lst2):> >return> set>(lst1).intersection(lst2)> > # Driver Code> lst1>=> [>4>,>9>,>1>,>17>,>11>,>26>,>28>,>28>,>26>,>66>,>91>]> lst2>=> [>9>,>9>,>74>,>21>,>45>,>11>,>63>]> print>(Intersection(lst1, lst2))>

>

>

Výkon:

{9, 11}>

Metóda 4:
Pomocou tohto hybridná metóda zložitosť programu klesá na O(n). Toto je efektívny spôsob vykonávania nasledujúceho programu.

Python3




# Python program to illustrate the intersection> # of two lists> def> intersection(lst1, lst2):> ># Use of hybrid method> >temp>=> set>(lst2)> >lst3>=> [value>for> value>in> lst1>if> value>in> temp]> >return> lst3> # Driver Code> lst1>=> [>9>,>9>,>74>,>21>,>45>,>11>,>63>]> lst2>=> [>4>,>9>,>1>,>17>,>11>,>26>,>28>,>28>,>26>,>66>,>91>]> print>(intersection(lst1, lst2))>

>

>

Výkon:

[9, 9, 11]>

Metóda 5:
Toto je miesto, kde sa vykonáva prienik cez podzoznamy v iných zoznamoch. Tu sme použili koncept filter ().

Python3




# Python program to illustrate the intersection> # of two lists, sublists and use of filter()> def> intersection(lst1, lst2):> >lst3>=> [>list>(>filter>(>lambda> x: x>in> lst1, sublist))>for> sublist>in> lst2]> >return> lst3> # Driver Code> lst1>=> [>1>,>6>,>7>,>10>,>13>,>28>,>32>,>41>,>58>,>63>]> lst2>=> [[>13>,>17>,>18>,>21>,>32>], [>7>,>11>,>13>,>14>,>28>], [>1>,>5>,>6>,>8>,>15>,>16>]]> print>(intersection(lst1, lst2))>

>

>

pracuje: Časť filtra vezme položku každého podzoznamu a skontroluje, či sa nachádza v zdrojovom zozname. Porozumenie zoznamu sa vykoná pre každý podzoznam v zozname 2.
Výkon:

[[13, 32], [7, 13, 28], [1, 6]]>

Metóda 6: Použitie znížiť():
Algoritmus:

  1. Importujte funkciu redukcie z modulu functools.
  2. Definujte dva zoznamy.
  3. Inicializujte priesečník premennej s prázdnym zoznamom.
  4. Použite funkciu redukcie na iteráciu prvkov lst1.
  5. Vo funkcii lambda skontrolujte, či je aktuálny prvok prítomný v lst2 a nie je už prítomný v zozname križovatiek.
  6. Ak áno, pridajte aktuálny prvok do zoznamu križovatiek.
  7. Vrátiť zoznam križovatiek.
  8. Vytlačte zoznam križovatiek.

Python3




from> functools>import> reduce> lst1>=> [>15>,>9>,>10>,>56>,>23>,>78>,>5>,>4>,>9>]> lst2>=> [>9>,>4>,>5>,>36>,>47>,>26>,>10>,>45>,>87>]> intersection>=> reduce>(>lambda> acc, x: acc>+> [x]>if> x>in> lst2>and> x>not> in> acc>else> acc, lst1, [])> print>(intersection)> #This code is contributed by Rayudu.>

>

>

Výkon

[9, 10, 5, 4]>

Časová zložitosť: O(n^2), kde n je dĺžka lst1.
Priestorová zložitosť: O(n), kde n je dĺžka lst1.