RE: [python] porovnání listů

Petr Prikryl Prikryl na skil.cz
Úterý Březen 22 12:37:05 CET 2005


Krmela Tomas napsal...
>
> Jen mne zajímalo zda není třeba nějaký 
> operátor na tuto činnost.

Není. Ale můžete si definovat pro tento
účel funkci. Příklad:

a.py
=========================================
def listCmp(lst1, lst2):
    """Zjistuje shodnost seznamu."""
    if len(lst1) != len(lst2):
        return False
   
    for i in xrange(len(lst1)):
        if lst1[i] != lst2[i]:
            return False

    return True



a = [1, 2, 3]
b = [1, 2, 3]
c = a
d = []
e = [1, 2]
f = [1, 2, 4]

print listCmp(a, a)
print listCmp(a, b)
print listCmp(a, c)
print listCmp(a, d)
print listCmp(a, e)
print listCmp(a, f)
=========================================    
    
Místo jinde zmiňovaného range() doporučuji
používat xrange() všude, kde je to možné.

Pokud bylo původním záměrem porovnání dvou
seznamů řetězců, pak možná lépe vyhoví
modul difflib:

b.py
=========================================    
import difflib

def pr(gen):
   """Vytiskne sekvenci radku vracenych generatorem."""
   for line in gen:
       print line
   print 'X' * 70
   

a = ['aa', 'ab', 'ac']
b = ['aa', 'ab', 'ac']
c = a
d = []
e = ['aa', 'ab']
f = ['aa', 'ab', 'ad']



print '=' * 70
F = difflib.context_diff
print 'Kontextove rozdily'
pr(F(a, a))
pr(F(a, b))
pr(F(a, c))
pr(F(a, d))
pr(F(a, e))
pr(F(a, f))

print '=' * 70
F = difflib.ndiff
print 'Delta rozdily'
pr(F(a, a))
pr(F(a, b))
pr(F(a, c))
pr(F(a, d))
pr(F(a, e))
pr(F(a, f))

print '=' * 70
F = difflib.unified_diff
print 'Delta rozdily v unifikovanem tvaru'
pr(F(a, a))
pr(F(a, b))
pr(F(a, c))
pr(F(a, d))
pr(F(a, e))
pr(F(a, f))

=========================================    

Petr



Další informace o konferenci Python