Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > What's the difference between these 2 statements?

Reply
Thread Tools

What's the difference between these 2 statements?

 
 
ATSkyWalker
Guest
Posts: n/a
 
      04-20-2005
What's the difference between these 2 statements?

If you have a String s="12345"

s[len(s)::-1] = "54321"

But

s[len(s):0:-1] = "5432"

Why? What's the difference? What number then can I use as the end of
the slice if I were to supply all 3 parameters?


Thanks,
AT
 
Reply With Quote
 
 
 
 
Reinhold Birkenfeld
Guest
Posts: n/a
 
      04-20-2005
ATSkyWalker wrote:
> What's the difference between these 2 statements?
>
> If you have a String s="12345"
>
> s[len(s)::-1] = "54321"
>
> But
>
> s[len(s):0:-1] = "5432"
>
> Why? What's the difference? What number then can I use as the end of
> the slice if I were to supply all 3 parameters?


-1.

Reinhold
 
Reply With Quote
 
 
 
 
tiissa
Guest
Posts: n/a
 
      04-20-2005
Reinhold Birkenfeld wrote:
> ATSkyWalker wrote:
>
>>What's the difference between these 2 statements?
>>
>>If you have a String s="12345"
>>
>>s[len(s)::-1] = "54321"
>>
>>But
>>
>>s[len(s):0:-1] = "5432"
>>
>>Why? What's the difference? What number then can I use as the end of
>>the slice if I were to supply all 3 parameters?

>
>
> -1.


-len(s) or less.
-1 will return an empty string.

Actually you start from len(s)-1 (len(s) is not an index in s) and you
stop when you reach the index specified (or the end). Since -1 is the
same index as the starting one (-1~>len(s)-1, -2~>len(s)-2,
-len(s)+1~>0), you end up with an empty string.

Therefore you have to try to reach indices lower (due to the negative
step) than the minimum valid index of your list in order to reverse it
fully.
 
Reply With Quote
 
ahmedt@gmail.com
Guest
Posts: n/a
 
      04-20-2005
s[len(s):-1:-1] yields an empty list !

Test code :

s = "12345"
print s[len(s)::-1] -> prints "54321"
print s[len(s):-1:-1] -> prints "" (nothing)

 
Reply With Quote
 
Reinhold Birkenfeld
Guest
Posts: n/a
 
      04-20-2005
tiissa wrote:
> Reinhold Birkenfeld wrote:
>> ATSkyWalker wrote:
>>
>>>What's the difference between these 2 statements?
>>>
>>>If you have a String s="12345"
>>>
>>>s[len(s)::-1] = "54321"
>>>
>>>But
>>>
>>>s[len(s):0:-1] = "5432"
>>>
>>>Why? What's the difference? What number then can I use as the end of
>>>the slice if I were to supply all 3 parameters?

>>
>>
>> -1.

>
> -len(s) or less.
> -1 will return an empty string.
>
> Actually you start from len(s)-1 (len(s) is not an index in s) and you
> stop when you reach the index specified (or the end). Since -1 is the
> same index as the starting one (-1~>len(s)-1, -2~>len(s)-2,
> -len(s)+1~>0), you end up with an empty string.
>
> Therefore you have to try to reach indices lower (due to the negative
> step) than the minimum valid index of your list in order to reverse it
> fully.


Right, sorry.

Well, I guess that's why one can leave out the index...

Reinhold
 
Reply With Quote
 
ahmedt@gmail.com
Guest
Posts: n/a
 
      04-20-2005
I'm sorry, I'm not really following your logic. Can you supply the
statement with the three parameters ?

so if I want to reverse it fully using s[len(s)-1:-1] what would x be
or is it impossible to express it in this way ?

Thanks,
AT

 
Reply With Quote
 
Peter Otten
Guest
Posts: n/a
 
      04-20-2005
wrote:

> so if I want to reverse it fully using s[len(s)-1:-1] what would x be
> or is it impossible to express it in this way ?


This does not work for integers, because the theoretically correct value
x = -1 already has another interpretation as the gap between the last and
the last but one character. Here are two workarounds:

1. Set x to None

>>> s = "12345"
>>> s[len(s):None:-1]

'54321'

2. Separate slicing operation and reversal:

>>> s = "12345"
>>> s[0:len(s)][::-1]

'54321'

Peter

 
Reply With Quote
 
ATSkyWalker
Guest
Posts: n/a
 
      04-20-2005
Peter,

I like the way you put it "the gap between the last and
the last but one character" .

I guess this is a side effect of of python's asymetric slice indexing
approach which takes a little getting used to.

AT

 
Reply With Quote
 
tiissa
Guest
Posts: n/a
 
      04-20-2005
wrote:
> I'm sorry, I'm not really following your logic. Can you supply the
> statement with the three parameters ?
>
> so if I want to reverse it fully using s[len(s)-1:-1] what would x be
> or is it impossible to express it in this way ?


Contrary to what I said above x should be _strictly_ less than -len(s).
You stop when you reach in the list the given end index (and don't take
the item there) or if you leave the index range.

But -1 as an index is the same as (len(s)-1).
Therefore going from len(s)-1 down to -1 is the same as going from
len(s)-1 to len(s)-1 hence an empty list.

And -len(s) is the same as 0 (my mistake above)
But -len(s)-1 is not in the list thus you won't discard any limit.

The example:
In [1]: s='12345'

In [2]: s[len(s)-1:0:-1]
Out[2]: '5432'

In [3]: s[len(s)-1:-1:-1]
Out[3]: ''

In [4]: s[-1],s[len(s)-1]
Out[4]: ('5', '5')

In [5]: s[len(s)-1:-len(s)-1:-1]
Out[5]: '54321'

In [6]: s[len(s)-1:-len(s):-1]
Out[6]: '5432'
 
Reply With Quote
 
tiissa
Guest
Posts: n/a
 
      04-20-2005
Peter Otten wrote:
> wrote:
>
>
>>so if I want to reverse it fully using s[len(s)-1:-1] what would x be
>>or is it impossible to express it in this way ?

>
>
> This does not work for integers, because the theoretically correct value
> x = -1 already has another interpretation as the gap between the last and
> the last but one character.

AFAIK, it is not an issue of integer (what else can an slice index be in
python?) but simply of index aliasing.

For x=-len(s)-1, you get the whole reversed list:

In [5]: s[len(s)-1:-len(s)-1:-1]
Out[5]: '54321'
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
difference between between these "char"s arnuld C++ 33 03-05-2007 03:11 PM
what's the difference between these two methods? (aka, why doesn't one of them work?) JohnJSal Python 13 11-04-2006 08:17 PM
Difference between bin and obj directories and difference between project references and dll references jakk ASP .Net 4 03-22-2005 09:23 PM
Difference between these two class declaration Rach Java 2 06-09-2004 11:50 AM
what is the difference between these two declarations Guybrush Threepwood C++ 7 02-26-2004 11:24 PM



Advertisments