list problem

Gerard Flanagan grflanagan at yahoo.co.uk
Wed Jul 26 12:45:58 EDT 2006


Gerard Flanagan wrote:
> placid wrote:
> > Hi all,
> >
> > I have two lists that contain strings in the form string + number for
> > example
> >
> > >>> list1 = [ ' XXX1', 'XXX2', 'XXX3', 'XXX5']
> >
> > the second list contains strings that are identical to the first list,
> > so lets say the second list contains the following
> >
> > >>> list1 = [ ' XXX1', 'XXX2', 'XXX3', 'XXX6']
> >
> > and now what ive been trying to do is find the first string that is
> > available,
> > i.e a string that is in neither of the two lists so the following code
> > should only print XXX4 then return.
> >
> > for i in xrange(1,10):
> >     numpart = str(1) + str("%04i" %i)
> >     str = "XXX" + numpart
> >
> >       for list1_elm in list1:
> >           if list1_elm == str:
> >                break
> >           else:
> >                for list2_elm in list2:
> >                    if list2_elm == str:
> >                       break
> >                    else:
> >                       print str
> >                       return
> >
> > Cheer
>
> I don't know how close the following is to what you want ( or how
> efficient etc...).  If both lists are the same up to a certain point,
> then the first function should do, if not, try the second function.
>
> Gerard
>
> from itertools import izip, dropwhile
>
> def get_first_missing1( seq1, seq2 ):
>     i = int( seq1[0][-1] )
>     for x1, x2 in izip( seq1, seq2 ):
>         if int(x1[-1]) != i and int(x2[-1]) != i:
>             return x1[:-1] + str(i)
>         i += 1
>     return -1
>
> def get_first_missing2( seq1, seq2 ):
>     i = int( seq1[0][-1] )
>     j = int( seq2[0][-1] )
>     if j < i:
>         seq1, seq2 = seq2, seq1
>         i, j = j, i
>     return get_first_missing1( list(dropwhile(lambda s: int(s[-1]) < j,
> seq1)), seq2 )
>
> L1 = [ 'XXX1', 'XXX2', 'XXX3', 'XXX5']
> L2 = [ 'YYY1', 'YYY2', 'YYY3', 'YYY6']
>
> print get_first_missing1(L1, L2)
> print get_first_missing2(L1, L2)
> 'XXX4'
> 'XXX4'

ehm...a bit limited in what it will handle, now that I look at it! like
more than ten items in a list - '11'[-1] == '1'...no time to test
further, sorry:(

Gerard




More information about the Python-list mailing list