Si të krahasoni dy lista në Python


Prezantimi

Kur programoni ose mësoni në Python, mund t'ju duhet të përcaktoni nëse dy ose më shumë lista janë të barabarta. Kur krahasoni listat për barazi, po kontrolloni nëse listat kanë të njëjtën gjatësi dhe nëse secili artikull në listë është i barabartë. Listat me gjatësi të ndryshme nuk janë kurrë të barabarta.

Ky artikull përshkruan se si të përdorni veçoritë e mëposhtme të Python për të krahasuar listat:

    Metoda
  • sort() ose funksioni sorted() me operatorin ==
  • Funksioni
  • set() me operatorin ==
  • Funksionet
  • reduce() dhe map() me operatorin ==
  • Klasa
  • collection.Counter() me operatorin ==
  • të kuptuarit e listës

Përdorimi i metodës sort() ose funksioni sorted() për të krahasuar listat

Ju mund të përdorni metodën sort() ose funksionin sorted() për të renditur listat me qëllim krahasimin e tyre për barazi. Metoda sort() rendit listën në vend, ndërsa funksioni sorted() kthen një listë të re. Pas renditjes, listat që janë të barabarta do të kenë të njëjtat artikuj në të njëjtat pozicione indeksi. Operatori == krahason listat, artikull për artikull (krahasimi sipas elementeve).

Renditja e artikujve të listës origjinale nuk është e rëndësishme, sepse listat renditen para krahasimit.

Shënim: Mund të renditni vetëm listat me artikuj të të njëjtit lloj të dhënash.

Shembull i metodës sort().

Shembulli i mëposhtëm tregon se si të përdoret metoda sort() për të renditur dhe krahasuar listat për barazi:

l1 = [10, 20, 30, 40, 50] 
l2 = [20, 30, 50, 40, 70] 
l3 = [50, 10, 30, 20, 40] 

l1.sort() 
l2.sort() 
l3.sort() 

if l1 == l2: 
    print ("The lists l1 and l2 are the same") 
else: 
    print ("The lists l1 and l2 are not the same") 

if l1 == l3: 
    print ("The lists l1 and l3 are the same") 
else: 
    print ("The lists l1 and l3 are not the same") 

Prodhimi është:

Output
The lists l1 and l3 are the same The lists l1 and l2 are not the same

Kodi i shembullit të mëparshëm rendit çdo listë, krahason l1 me l3 dhe printon rezultatin dhe më pas krahason l1 me l2 dhe printon rezultatin.

Sorted() Shembull Funksioni

Shembulli i mëposhtëm tregon se si përdoret funksioni sorted() për të renditur dhe krahasuar listat për barazi:

l1 = [10, 20, 30, 40, 50]
l2 = [20, 30, 50, 40, 70]
l3 = [50, 10, 30, 20, 40]

l1_sorted = sorted(l1)
l2_sorted = sorted(l2)
l3_sorted = sorted(l3)

if l1_sorted == l2_sorted:
    print ("The lists l1 and l2 are the same")
else:
    print ("The lists l1 and l2 are not the same")

if l1_sorted == l3_sorted:
    print ("The lists l1 and l3 are the same")
else:
    print ("The lists l1 and l3 are not the same")

Prodhimi është:

Output
The lists l1 and l3 are the same The lists l1 and l2 are not the same

Kodi i shembullit të mëparshëm kthen një version të renditur të secilës listë, krahason l1 me l3 dhe printon rezultatin dhe më pas krahason l1 me l2 dhe printon rezultatin.

Përdorimi i funksioneve reduce() dhe map() për të krahasuar listat

Ju mund të përdorni funksionin map() Python së bashku me funksionin functools.reduce() për të krahasuar artikujt e të dhënave të dy listave. Kur i përdorni ato në kombinim, funksioni map() zbaton funksionin e dhënë për çdo element dhe funksioni reduce() siguron që ai e zbaton funksionin në mënyrë të njëpasnjëshme.

Funksioni map() pranon një funksion dhe një iterable si argumente. Funksioni map() zbaton funksionin e dhënë për çdo artikull të iterable-it dhe më pas kthen një objekt harte (iterator) si rezultat.

Funksioni functools.reduce() gjithashtu pranon një funksion dhe një iterable si argumente. Funksioni functools.reduce() zbaton funksionin e dhënë për çdo element të iterabilit në mënyrë rekursive. Fillimisht, functools.reduce() aplikon funksionin në artikujt e parë dhe të dytë dhe kthen rezultatin, dhe më pas zbaton funksionin në rezultat dhe artikullin e tretë dhe vazhdon derisa lista të mos ketë asnjë artikull majtas.

Kur i përdorni ato në kombinim, funksioni map() zbaton funksionin e dhënë për çdo element dhe funksioni reduce() siguron që ai e zbaton funksionin në mënyrë të njëpasnjëshme.

Renditja e artikujve të listës është e rëndësishme kur përdorni funksionet reduce() dhe map(). Listat me të njëjtat artikuj në renditje të ndryshme nuk do të kthejnë true kur krahasohen për barazi. Nëse kërkohet, së pari mund t'i renditni listat.

Shembulli i mëposhtëm tregon se si të përdorni funksionet reduce() dhe map() për të krahasuar listat për barazi:

import functools

l1 = [10, 20, 30, 40, 50]
l2 = [20, 30, 50, 40, 70]
l3 = [10, 20, 30, 40, 50]

if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l2), True):
    print ("The lists l1 and l2 are the same")
else:
    print ("The lists l1 and l2 are not the same")

if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l3), True):
    print ("The lists l1 and l3 are the same")
else:
    print ("The lists l1 and l3 are not the same")

Prodhimi është:

Output
The lists l1 and l2 are not the same The lists l1 and l3 are the same

Kodi i shembullit të mëparshëm krahason l1 me l2 dhe më pas krahason l1 me l3.

Përdorimi i funksionit set() për të krahasuar listat

Ju mund të përdorni funksionin set() për të krijuar objekte set duke përdorur listat e dhëna dhe më pas të krahasoni grupet për barazi duke përdorur operatorin ==.

Rendi i artikujve të listës origjinale nuk është i rëndësishëm, sepse operatori == kthen true kur çdo grup përmban artikuj identikë në çfarëdo radhe.

Shënim: Artikujt e listës dublikatë shfaqen vetëm një herë në një grup.

Shembulli i mëposhtëm tregon se si të krijohen grupe nga listat dhe të krahasohen grupet për barazi:

l1 = [10, 20, 30, 40, 50]
l2 = [50, 10, 30, 20, 40]

a = set(l1)
b = set(l2)

if a == b:
    print("Lists l1 and l2 are equal")
else:
    print("Lists l1 and l2 are not equal")

Prodhimi është:

Output
Lists l1 and l2 are equal

Kodi i shembullit të mëparshëm krijon grupe a dhe b nga listat l1 dhe l2 dhe më pas krahason grupet dhe printon rezultat.

Përdorimi i koleksioneve.Klasa Counter() për të krahasuar listat

Klasa collections.Counter() mund të përdoret për të krahasuar listat. Funksioni counter() numëron frekuencën e artikujve në një listë dhe ruan të dhënat si objekt fjalori në formatin value:frequency. Nëse dy lista kanë të njëjtin rezultat fjalori, mund të konkludoni se listat janë të njëjta.

Renditja e artikujve të listës origjinale nuk është e rëndësishme kur përdorni klasën Counter për të krahasuar listat.

Shembulli i mëposhtëm tregon se si të krijoni objekte Counter nga listat e dhëna dhe t'i krahasoni ato për barazi:

import collections

l1 = [10, 20, 30, 40, 50]
l2 = [20, 30, 50, 40, 70]
l3 = [50, 20, 30, 40, 10]

if collections.Counter(l1) == collections.Counter(l2):
    print ("The lists l1 and l2 are the same")
else:
    print ("The lists l1 and l2 are not the same")

if collections.Counter(l1) == collections.Counter(l3):
    print ("The lists l1 and l3 are the same")
else:
    print ("The lists l1 and l3 are not the same")

Prodhimi është:

Output
The lists l1 and l2 are not the same The lists l1 and l3 are the same

Kodi i shembullit të mëparshëm krijon objekte Counter për listat l1 dhe l2, i krahason ato dhe printon rezultatin. Kodi përsëritet për listat l1 dhe l3.

Përdorimi i të kuptuarit të listave për të krahasuar listat

Ju mund të përdorni të kuptuarit e listës për të krahasuar dy lista. Për më shumë informacion rreth kuptimeve të listave, referojuni Kuptimi i Kuptimeve të Listës në Python 3.

Renditja e artikujve të listës origjinale nuk është e rëndësishme kur përdorni të kuptuarit e listës për të krahasuar listat.

Shembulli i mëposhtëm tregon se si të përdoret një kuptim i listës për të krahasuar listat:

l1 = [10, 20, 30, 40, 50]
l2 = [50, 75, 30, 20, 40]
l3 = [50, 20, 30, 40, 10]

res = [x for x in l1 + l2 if x not in l1 or x not in l2]

print(res)
if not res:
    print("Lists l1 and l2 are equal")
else:
    print("Lists l1 and l2 are not equal")

res2 = [x for x in l1 + l3 if x not in l1 or x not in l3]

print(res2)
if not res2:
    print("Lists l1 and l3 are equal")
else:
    print("Lists l1 and l3 are not equal")

Kodi i shembullit të mëparshëm vendos një element treguesi x në listat l1 dhe l2, më pas kontrollon nëse artikulli i treguar nga elementi tregues është i pranishëm në listat. Nëse rezultati, res është një listë boshe, atëherë mund të konkludoni se listat janë të barabarta, pasi nuk ka artikuj që shfaqen vetëm në njërën prej listave.

Prodhimi është:

Output
[10, 75] Lists l1 and l2 are not equal

konkluzioni

Ky artikull përshkruan disa mënyra të ndryshme për të krahasuar listat për barazinë në Python. Vazhdoni të mësoni me më shumë mësime Python.