Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #108785
| From | Random832 <random832@fastmail.com> |
|---|---|
| Newsgroups | comp.lang.python |
| Subject | Re: Extract the middle N chars of a string |
| Date | 2016-05-18 17:28 -0400 |
| Message-ID | <mailman.19.1463606931.27390.python-list@python.org> (permalink) |
| References | <573c8e97$0$1596$c3e8da3$5496439d@news.astraweb.com> <1463606923.1353025.611955401.37F5D0F6@webmail.messagingengine.com> |
On Wed, May 18, 2016, at 11:47, Steven D'Aprano wrote:
> So after spending a ridiculous amount of time on what seemed like it
> ought
> to be a trivial function, and an embarrassingly large number of
> off-by-one
> and off-by-I-don't-even errors, I eventually came up with this:
>
> def mid(string, n):
> """Return middle n chars of string."""
> L = len(string)
> if n <= 0:
> return ''
> elif n < L:
> Lr = L % 2
> a, ar = divmod(L-n, 2)
> b, br = divmod(L+n, 2)
> a += Lr*ar
> b += Lr*br
> string = string[a:b]
> return string
My take:
def mid(string, n):
if n > len(string): n = len(string)
if n <= 0: n = 0
offset = int(len(string)/2+n/2)
return string[offset:offset+n]
It doesn't get the same result as yours when the length is odd and N is
even, but the problem is ambiguous there and I feel like my algorithm is
more clear.
I'm funneling the special cases through the slice statement at the end
rather than simply returning string and '' because it's conceptually
nicer and because it could be used for other purposes than slicing
strings.
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Extract the middle N chars of a string Steven D'Aprano <steve@pearwood.info> - 2016-05-19 01:47 +1000
Re: Extract the middle N chars of a string Ian Kelly <ian.g.kelly@gmail.com> - 2016-05-18 10:34 -0600
Re: Extract the middle N chars of a string Peter Otten <__peter__@web.de> - 2016-05-18 18:41 +0200
Re: Extract the middle N chars of a string Peter Otten <__peter__@web.de> - 2016-05-18 18:54 +0200
Re: Extract the middle N chars of a string Steven D'Aprano <steve@pearwood.info> - 2016-05-19 11:37 +1000
Re: Extract the middle N chars of a string MRAB <python@mrabarnett.plus.com> - 2016-05-18 18:00 +0100
Re: Extract the middle N chars of a string Steven D'Aprano <steve@pearwood.info> - 2016-05-19 11:34 +1000
Re: Extract the middle N chars of a string Random832 <random832@fastmail.com> - 2016-05-18 17:28 -0400
Re: Extract the middle N chars of a string Steven D'Aprano <steve@pearwood.info> - 2016-05-19 11:03 +1000
Re: Extract the middle N chars of a string Grant Edwards <grant.b.edwards@gmail.com> - 2016-05-18 21:35 +0000
Re: Extract the middle N chars of a string Steven D'Aprano <steve@pearwood.info> - 2016-05-19 10:48 +1000
Re: Extract the middle N chars of a string Wildman <best_lay@yahoo.com> - 2016-05-18 23:17 -0500
Re: Extract the middle N chars of a string boB Stepp <robertvstepp@gmail.com> - 2016-05-20 23:00 -0500
csiph-web