On Fri, Dec 6, 2013 at 8:45 PM, Mark Lawrence <[email protected]>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@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 - [email protected] > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > -- Joel Goldstick http://joelgoldstick.com
_______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor
