Како да споредите две листи во Пајтон


Вовед

Кога програмирате или учите во Python, можеби ќе треба да одредите дали две или повеќе листи се еднакви. Кога ги споредувате списоците за еднаквост, проверувате дали списоците се со иста должина и дали секоја ставка во листата е еднаква. Списоците со различни должини никогаш не се еднакви.

Оваа статија опишува како да ги користите следните карактеристики на Python за да споредувате списоци:

  • sort() методот или функцијата sorted() со операторот ==
  • Функција
  • set() со операторот ==
  • Функциите
  • reduce() и map() со операторот ==
  • collection.Counter() класа со операторот ==
  • разбирање на списокот

Користење на методот sort() или функцијата sorted() за споредување на листи

Можете да го користите методот sort() или функцијата sorted() за да ги сортирате списоците со цел да ги споредите за еднаквост. Методот sort() ја подредува листата на место, додека функцијата sorted() враќа нова листа. По сортирањето, списоците кои се еднакви ќе ги имаат истите ставки на истите индексни позиции. Операторот == ги споредува списоците, ставка по ставка (споредба според елементите).

Редоследот на оригиналните ставки од списокот не е важен, бидејќи списоците се подредени пред споредба.

Забелешка: Можете да сортирате само списоци со ставки од ист тип на податоци.

Сорт() метод Пример

Следниот пример покажува како да се користи методот sort() за подредување и споредување списоци за еднаквост:

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

Излезот е:

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

Претходниот пример код ја подредува секоја листа, го споредува l1 со l3 и го печати резултатот, а потоа го споредува l1 со l2 и го печати резултатот.

Sorted() Функција Пример

Следниот пример покажува како се користи функцијата sorted() за подредување и споредување списоци за еднаквост:

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

Излезот е:

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

Претходниот пример код враќа подредена верзија на секоја листа, го споредува l1 со l3 и го печати резултатот, а потоа го споредува l1 со l2 и го печати резултатот.

Користење на функциите reduce() и map() за споредување на листи

Можете да ја користите функцијата map() на Python заедно со функцијата functools.reduce() за да ги споредите податочните ставки од две списоци. Кога ги користите во комбинација, функцијата map() ја применува дадената функција на секој елемент, а функцијата reduce() осигурува дека ја применува функцијата на последователен начин.

Функцијата map() прифаќа функција и повторлив како аргументи. Функцијата map() ја применува дадената функција на секоја ставка од итерабилот и потоа враќа објект на мапа (итератор) како резултат.

Функцијата functools.reduce() исто така прифаќа функција и повторлив како аргументи. Функцијата functools.reduce() ја применува дадената функција на секој елемент од итерабилот рекурзивно. Првично, functools.reduce() ја применува функцијата на првата и втората ставка и го враќа резултатот, а потоа ја применува функцијата на резултатот и третата ставка и продолжува додека листата нема ставки лево.

Кога ги користите во комбинација, функцијата map() ја применува дадената функција на секој елемент, а функцијата reduce() осигурува дека ја применува функцијата на последователен начин.

Редоследот на ставките од списокот е важен кога ги користите функциите reduce() и map(). Списоците со исти ставки во различен редослед нема да враќаат true кога ќе се споредат за еднаквост. Доколку е потребно, прво можете да ги сортирате списоците.

Следниот пример покажува како да се користат функциите reduce() и map() за да се споредат списоците за еднаквост:

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

Излезот е:

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

Претходниот пример код го споредува l1 со l2 и потоа го споредува l1 со l3.

Користење на функцијата set() за споредба на листи

Можете да ја користите функцијата set() за да креирате објекти set користејќи ги дадените списоци и потоа да ги споредите множествата за еднаквост со помош на операторот ==.

Редоследот на оригиналните ставки од списокот не е важен, бидејќи операторот == враќа true кога секое множество содржи идентични ставки по кој било редослед.

Забелешка: дупликатите ставки од списокот се појавуваат само еднаш во сетот.

Следниот пример покажува како да креирате множества од списоци и да ги споредите множествата за еднаквост:

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

Излезот е:

Output
Lists l1 and l2 are equal

Претходниот пример код создава множества a и b од списоците l1 и l2 и потоа ги споредува множествата и ги печати резултат.

Користење на колекциите.Класа Counter() за споредување на листи

Класата collections.Counter() може да се користи за споредување списоци. Функцијата counter() ја брои фреквенцијата на ставките во списокот и ги зачувува податоците како речник објект во формат value:frequency. Ако две листи имаат ист речник, можете да заклучите дека списоците се исти.

Редоследот на оригиналните ставки од списокот не е важен кога ја користите класата Counter за да споредувате списоци.

Следниот пример покажува како да креирате Counter објекти од дадените списоци и да ги споредите за еднаквост:

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

Излезот е:

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

Претходниот пример код создава објекти Counter за списоците l1 и l2, ги споредува и го печати резултатот. Кодот се повторува за списоците l1 и l3.

Користење на разбирање списоци за споредба на листи

Можете да го користите разбирањето на списокот за да споредите две списоци. За повеќе информации за разбирањето на списоците, погледнете во Разбирање на разбирањата на листите во Python 3.

Редоследот на оригиналните ставки на списокот не е важен кога користите разбирање на списокот за да споредувате списоци.

Следниот пример покажува како да се користи разбирање списоци за да се споредат списоците:

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

Претходниот пример код поставува елемент на покажувачот x на списоците l1 и l2, а потоа проверува дали ставката посочена од елементот на покажувачот е присутна во списоците. Ако резултатот, res е празна листа, тогаш можете да заклучите дека списоците се еднакви, бидејќи нема ставки што се појавуваат само во една од списоците.

Излезот е:

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

Заклучок

Оваа статија опишува неколку различни начини за споредување списоци за еднаквост во Python. Продолжете со учењето со повеќе упатства за Python.