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