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