"jmDesktop" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] | This program: | | s = 'abcde' | i = -1 | for i in range (-1, -len(s), -1): | print s[:i], i | | gives | | abcd -1 | abc -2 | ab -3 | a -4 | | Why doesn't the first one have the e if -1 is the end of the list? In | Dive Into Python it said that -1 was the end of the list. Thanks.
A sequence with n items has n+1 slice positions, numbered 0 to n: the 2 at beginning and end and n-1 between items. Example -a-b-c- 0 1 2 3 has 4 slice positions. Hence the first item is seq[0:1] and last is seq[n-1:n] In a sense, we 'ought' to index sequences with average of two successive slice positions, giving seq[1/2],,,seq[n-1/2]. But this is inconvenient, so we either round down (C, Python, etc) or up (Fortran), giving seq[0],,,,seq[n-1] or seq[1],,,seq[n]. Python allows n-1 and n-k to be abbreviated as -1 and -k. -1 as an abbreviation of n-1 is only the end of the list for indexing. n is the end for slicing. It is abbreviated by omission. Perhaps for i in range(n+1): print i, 'abcde'[:5-i] will make this all even clearer. Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list