"peter hodgson" <[EMAIL PROTECTED]> wrote
for key in b:
   keylist = key.split(',')
   if keylist < a:
       i = a.index(keylist[0])
       print a[:i] + [b[key]] + a[i+len(keylist):]

now, i get it, mostly; but keylist being shorter than the list "a"

keylist < a
True

This is not testing the length it is testing the contents.

a = ['a','c','e']
b = ['b','d','f']
a<b
True
b<a
False

It sees that 'a' < 'b' so returns True for a<b but
since 'b' is not less than 'a' it returns false for b<a
Now consider more closely aligned examples:

c = ['a','b','c']
c<a
True

Here the a's are equal so it checks the second element and finds b < c so c<a is true

Finally for unequal length strings

d = ['a','c']
d<a
True
d<c
False


So d winds over a since the third element not existing is taken to be lower valued than it existing. But the character values in d<c a still win out regardless of length.

Does that make sense?

So in the original program

for key in b:
   keylist = key.split(',')
   if keylist < a:
       i = a.index(keylist[0])
       print a[:i] + [b[key]] + a[i+len(keylist):]

It is checking that it will find a valid index in the i assignment.
Having said that I'm not sure the check is fully effective since I have a feeling it may fail for duplicated instances of the first letter.... But to answer your question the list comparison is more complex than just length.

And finally the a{:i] part is to cover the case where the index i is greater than 0. So we retain the initial values up to the matching key.

HTH,

--
Alan Gauld
Author of the Learn to Program web site
http://www.freenetpages.co.uk/hp/alan.gauld

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to