# Unit 1 question selecting subsequences in strings

 0 When selecting a sequence of chars in a string you use string[start:stop]. Since is the position of the first character in the sequence why isn't the position of the last character? Why was designed as inclusive and as exclusive? asked 16 Mar '12, 20:20 alan wheeler-2 47●1●5 accept rate: 50%

 2 One reason has to do with lists and strings being indexed from 0 instead of 1 (and most languages out there do this--not just Python, blame C for this). Thus, if you did a substring of str[0:len(str)], you get the entire string. Another reason is for processing strings. For example, suppose you want to take substrings at index A, B, C, then you would have str[0:A], str[A:B], str[B:C], str[C:]. I don't have to add plus 1 everywhere. Finally, it also allows you to take substrings that are empty strings, e.g. str[A:A], although I can't think of a good reason off-hand. Sometimes string functions prefer start index and length instead (I prefer this, but start and end + 1 seems more common). answered 16 Mar '12, 21:37 Charles Lin 9.2k●42●94●135 APL used 0-based indexing before C did. :-) (17 Mar '12, 11:46) Kenneth I. L...
 0 Fundamentally, the answer is "because that's the choice that the language author made." I agree with you that it's an odd choice, but then I'm used to a language that does it the other way. (Panorama PanTalk. It also uses a semicolon instead of the colon.) There's no hope of reversing the decision, but we are free to think in terms of a different name for the second parameter. You could call it "upto" or "limit" or "until", for instance. EDIT: On later thought, "startscan" and "stopscan" seem like good mnemonic names for the two parameters. If one were really bugged by the built-in syntax, one could write a wrapper function that adds 1 to its second parameter and then calls the built-in version. A bit slower to execute, of course, but Python isn't the right language for high-performance computation. answered 16 Mar '12, 20:34 Kenneth I. L... 21.5k●19●76●178 I went back to see if he said anything about this in the lecture in case I missed it, but he didn't say why its this way. Its just strange. It would be nice to know why it is done this way. (16 Mar '12, 20:51) alan wheeler-2 My first guess is that Guido van Rossum was used to doing it that way in the previous language he used (ABC, nee SETL?), or chose to do it the way some larger community (Java?) was then doing it. My second guess it that it arose in the misty past, when some subroutine author wrote a tight code loop to test various syntaxes and found that his code was slightly more elegant with this parameter definition. (Other test cases would have given other results.) The choice was later locked into Python as a built-in function. The least likely hypothesis is that someone ran tests with a large number of programmers writing a lot of code, and discovered that this choice improved productivity or programmer satisfaction. That's the kind of testing Bell Labs did to arrive at an optimal arrangement of digits on early telephones. There is a human factors research community building models of human attention and action that can simulate repetitive behaviors and predict error rates, but so far their models apply better to cockpit design than to programming language development. But I'm talking through my hat, with no knowledge of the real history. Anyone know the answer? (16 Mar '12, 21:26) Kenneth I. L...
 0 One way to think about this is to think about the indexes being between the letters. Like this:  p = "String indexing"  is " S t r i n g i n d e x i n g " 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  This gives a reasonable model for the examples above - things like p[2:6] => ring p[7:12]+p[12:15] == p[7:15]  ...and so on. If you want, you can see every index as a running count - How many characters has there been in this string before this slot? Also, it explains how you can start from 0 and still slice with the length of the string. answered 17 Mar '12, 14:16 JohanG-Sweden 9.4k●12●42●100
Question text:

Markdown Basics

• *italic* or _italic_
• **bold** or __bold__
• image?![alt text](/path/img.jpg "Title")
• numbered list: 1. Foo 2. Bar
• to add a line break simply add two spaces to where you would like the new line to be.
• basic HTML tags are also supported

×15,222
×178
×70
×43