[Tutor] 'slice', etc

Joel Goldstick joel.goldstick at gmail.com
Sat Dec 7 02:49:40 CET 2013


On Fri, Dec 6, 2013 at 8:45 PM, Mark Lawrence <breamoreboy at yahoo.co.uk>wrote:

> On 07/12/2013 01:26, spir wrote:
>
>> On 12/07/2013 02:07 AM, Alan Gauld wrote:
>>
>>> On 06/12/13 15:39, spir wrote:
>>>
>>>  How does slicing in Python really work? Apparently, there are slice
>>>> objects (start, past-end, step), generated using either the 'slice'
>>>> builtin func or the extended slicing syntax [i:k:s]. Is this correct?
>>>> [1]
>>>>
>>>
>>> I believe the slice notation simply calls the underlying method as is
>>> the case
>>> for most operations in Python. But I'm no expert in the internals,
>>> others are
>>> far better qualified.
>>>
>>>  Does (only) the extended syntax (always) trigger slicing instead of
>>>> contructing a new subsequence? (new substring or sublist or whatever,
>>>> actually holding a section of the original sequence)
>>>>
>>>
>>> I'm not sure what you think slicing does? But in general a slice
>>> produces a new
>>> sequence. Thus
>>>
>>>
>>> L = [1,2,3,4]
>>> L2 = L[1:2]
>>>
>>> L2 is a new list object.
>>>
>>> Indeed taking a full slice is one of the commonest ways of making a
>>> copy of a list:
>>>
>>> L3 = L[:]   # a new copy of L
>>>
>>>  Are slices and subsequences transparently usable one for the other?
>>>>
>>>
>>> subsequences don't exist as objects in Python so you can't use them in
>>> the same
>>> way as a slice (which does explicitly exist). So I don't understand
>>> what you
>>> have in mind here.
>>>
>>>  rationale, design, etc... Maybe this means slices have always existed
>>>> and I just missed them totally?
>>>>
>>>
>>> Slices have been in python since I started using it in V1.3. And I
>>> think from
>>> before then too. Certainly a very long time.
>>>
>>>  [2] The fact that slices exist at all shows how worth it is to avoid
>>>> needlessly creating subsequences,
>>>>
>>>
>>> No it doesn't. Slices create new sequences.
>>> Creating a "sub sequence" is often the fastest most efficient way to do
>>> something. They are not something to get hung up about unless you have
>>> absolutely proved they are a source of a problem. Especially given the
>>> difficulty of writing reliable in-place code for many sequence
>>> operations.
>>>
>>
>> Hum, we are not talking of the same topic, apparently. I mean this, from
>> the library ref, builtin funcs:
>> http://docs.python.org/3.3/library/functions.html#slice:
>>
>>   slice(start, stop[, step])
>>
>
I'm totally confused by this.  What is this a slice of? there is no object
on which to apply the slice indices?


>
>>      Return a slice object representing the set of indices specified by
>> range(start, stop, step).
>>      The start and step arguments default to None. Slice objects have
>> read-only data attributes
>>      start, stop and step which merely return the argument values (or
>> their default).
>>      They have no other explicit functionality; however they are used by
>> Numerical
>>      Python and other third party extensions. Slice objects are also
>> generated when
>>      extended indexing syntax is used. For example: a[start:stop:step]
>> or a[start:stop, i].
>>      See itertools.islice() for an alternate version that returns an
>> iterator.
>>
>> Note the third and forelast sentences (extedned syntax apparently means
>> indicating a step).
>>
>> spir at ospir:~$ python3
>> Python 3.3.1 (default, Sep 25 2013, 19:29:01)
>> [GCC 4.7.3] on linux
>> Type "help", "copyright", "credits" or "license" for more information.
>>
>>> s = slice(1,-1,3)
>>>>> s.start, s.stop, s.step
>>>>>
>>>> (1, -1, 3)
>>
>>> s
>>>>>
>>>> slice(1, -1, 3)
>>
>> But i don't see what changes below, when using extended indexing syntax:
>>
>>  str = "abcdefghi"
>>>>> sl = str[1:-1:2]
>>>>> sl
>>>>>
>>>> 'bdfh'
>>
>>> type(sl)
>>>>>
>>>> <class 'str'>
>>
>> How to get a actual slice (a view, something like (str, 1, -1, 2) or
>> better (start-pointer, -1, 2))? Why does slice() exist at all? How to
>> use it? Is it used internally? Or does python cheat, pretending on the
>> interface, at the language-side, that this is a str, just to maintain
>> the language's semantics, while in some cases at least it is not?
>>
>> Denis
>>
>>
> The good news is there is a memoryview in Python, see
> http://docs.python.org/3/library/functions.html#func-memoryview.  The bad
> news is it doesn't work on strings. See here for the slice object
> http://docs.python.org/3/library/functions.html#slice.
>
>
> --
> My fellow Pythonistas, ask not what our language can do for you, ask what
> you can do for our language.
>
> Mark Lawrence
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>



-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20131206/efe25fad/attachment.html>


More information about the Tutor mailing list