comparing lists
Delaney, Timothy
tdelaney at avaya.com
Wed May 8 23:25:30 EDT 2002
> From: Lulu of the Lotus-Eaters [mailto:mertz at gnosis.cx]
[code snipped]
import string
from time import clock
from random import randrange
dSize = 3
delim = ''.join(map(chr, [randrange(0,256) for _ in range(dSize)]))
def l1str():
""""""
str = 'abcde'
r = [(randrange(0, len(str)), randrange(0, len(str))) for x in
range(randrange(0, len(str)))]
for i, j in r:
i, j = min(i, j), max(i, j)
str = str[:i] + str[j:j+1] + str[i:j] + str[j+1:]
return str
def l2str (str):
""""""
r = [randrange(0, len(str)) for x in range(randrange(0, len(str)))]
for i in r:
str = str[:i] + str[i:i+1].upper() + str[i+1:]
return str
def DelaneyCompare(l1, l2):
l1 = map(string.lower, l1)
l2 = map(string.lower, l2)
l1.sort()
l2.sort()
return l1 == l2
def LuluCompare(l1, l2):
l1.sort()
l2.sort()
s1 = delim.join(l1).lower()
s2 = delim.join(l2).lower()
return s1 == s2
if __name__=='__main__':
SIZE = 10
l1 = [l1str() for x in range(SIZE)]
l2 = [l2str(s1) for s1 in l1]
print l1
print l2
print
start = clock()
print 'Delaney Result:', DelaneyCompare(l1, l2)
print 'Time:', clock()-start
start = clock()
print 'Lulu Result: ', LuluCompare(l1, l2)
print 'Time:', clock()-start
SIZE = 10000
l1 = [l1str() for x in range(SIZE)]
l2 = [l2str(s1) for s1 in l1]
print
start = clock()
print 'Delaney Result:', DelaneyCompare(l1, l2)
print 'Time:', clock()-start
start = clock()
print 'Lulu Result: ', LuluCompare(l1, l2)
print 'Time:', clock()-start
---------- Run ----------
['aebcd', 'dcabe', 'adebc', 'acebd', 'abcde', 'abcde', 'abcde', 'abcde',
'abcde', 'baecd']
['AebCD', 'dCAbe', 'aDeBC', 'aCebd', 'abcde', 'Abcde', 'abcDe', 'aBCDE',
'Abcde', 'bAeCd']
Delaney Result: 1
Time: 0.000317816168981
Lulu Result: 0
Time: 0.000125518683322
Delaney Result: 1
Time: 0.169594990082
Lulu Result: 0
Time: 0.0750326542647
> I like my version about 10x better :-).
I like my version infinitely better :)
In your case, it didn't matter what order the data sorted in - it would
always end up giving the same result since each entry was not only already
lowercase, but all the entries were the same sequence of characters. In my
case, I mixed up the order of characters (with each position in the two
lists having the same order of characters) then mixed up the casing.
Tim Delaney
More information about the Python-list
mailing list