If I have a string:

"The quick brown fox jumps over the lazy dog!"

I will often use the split() function to tokenize the string.

```
testString = "The quick brown fox jumps over the lazy dog!"
testTokens = testString.split(" ")

```

This will give me a list:

```
['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog!']

```

If I want to remove the first token and keep the REST of the tokens intact, I will do something like this to make it a one-liner:

```
newString = " ".join(testTokens.split(' ')[1:]) # "quick brown fox jumps over the lazy dog!"

```

Or, if I want a certain range:

```
newString = " ".join(testTokens.split(' ')[2:4]) # "brown fox"
newString = " ".join(testTokens.split(' ')[:3]) # "The quick brown"

```

Of course, I may want to split on something other than a space:

```
testString = "So.long.and.thanks.for.all.the.fish!"
testTokens = testString.split('.')

newString = ".".join(testTokens.split('.')[3:]) # "thanks.for.all.the.fish!"

```

Is this the BEST way to accomplish this? Or is there a more efficient or more readable way?