logo

Python | Dviejų sąrašų sankirta

Dviejų sąrašų sankirta reiškia, kad turime paimti visus tuos elementus, kurie yra bendri abiem pradiniams sąrašams, ir saugoti juos kitame sąraše. Dabar Python yra įvairių būdų, per kuriuos galime atlikti sąrašų sankirtą.
Pavyzdžiai:

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

1 būdas:
Tai paprasčiausias būdas, kai nenaudojome jokių įtaisytųjų funkcijų.



Python3




java įvestis



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



>

>

Išvestis:

[9, 11, 26, 28]>

2 būdas:
Šis metodas apima naudojimą set() metodas .

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

>

>

Išvestis:

[9, 10, 4, 5]>

Aukščiau pateiktos programos laiko sudėtingumas yra O(n), kur n yra ilgesnio sąrašo tarp lst1 ir lst2 ilgis.

Programos erdvės sudėtingumas yra O(n), kur n yra mažesnio sąrašo tarp lst1 ir lst2 ilgis.

3 būdas:
Šiuo metodu mes set() didesnis sąrašas ir tada naudokite įtaisytąją funkciją, vadinamą sankryža () susikirtimo sąrašui apskaičiuoti. sankryža () yra pirmos klasės komplekto dalis.

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

>

>

Išvestis:

{9, 11}>

4 būdas:
Naudojant šį hibridinis metodas programos sudėtingumas patenka į O(n). Tai efektyvus būdas atlikti šią programą.

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

>

>

Išvestis:

[9, 9, 11]>

5 būdas:
Tai vieta, kur sankirta atliekama per antrinius sąrašus kituose sąrašuose. Čia mes panaudojome sąvoką filtras().

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

>

>

Dirba: Filtro dalis paima kiekvieną posąrašo elementą ir patikrina, ar jis yra šaltinių sąraše. Sąrašo supratimas vykdomas kiekvienam sąraše2 esančiam posąrašiui.
Išvestis:

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

6 būdas: naudokite redukcijos ():
Algoritmas:

  1. Importuokite mažinimo funkciją iš functools modulio.
  2. Apibrėžkite du sąrašus.
  3. Inicijuokite kintamųjų sankirtą tuščiu sąrašu.
  4. Naudokite mažinimo funkciją, kad kartotumėte lst1 elementus.
  5. Lambda funkcijos viduje patikrinkite, ar dabartinis elementas yra lst2, o jo dar nėra sankryžų sąraše.
  6. Jei taip, pridėkite esamą elementą į sankryžų sąrašą.
  7. Grąžinkite sankryžų sąrašą.
  8. Spausdinkite sankryžų sąrašą.

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

>

>

Išvestis

[9, 10, 5, 4]>

Laiko sudėtingumas: O(n^2), kur n yra lst1 ilgis.
Erdvės sudėtingumas: O(n), kur n yra lst1 ilgis.