Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #108785
| Path | csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail |
|---|---|
| From | Random832 <random832@fastmail.com> |
| Newsgroups | comp.lang.python |
| Subject | Re: Extract the middle N chars of a string |
| Date | Wed, 18 May 2016 17:28:43 -0400 |
| Lines | 37 |
| 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> |
| Mime-Version | 1.0 |
| Content-Type | text/plain |
| Content-Transfer-Encoding | 7bit |
| X-Trace | news.uni-berlin.de JOfIhc4LO0+PvN3zKLKOvwFmY+Dl6xIsV9AtNBC58LqQ== |
| Return-Path | <random832@fastmail.com> |
| X-Original-To | python-list@python.org |
| Delivered-To | python-list@mail.python.org |
| X-Spam-Status | OK 0.001 |
| X-Spam-Evidence | '*H*': 1.00; '*S*': 0.00; 'elif': 0.04; 'seemed': 0.07; 'strings.': 0.07; '"""return': 0.09; 'received:internal': 0.09; 'subject:string': 0.09; 'def': 0.13; 'wed,': 0.15; 'clear.': 0.16; 'message-id:@webmail.messagingengine.com': 0.16; 'received:10.202': 0.16; 'received:10.202.2': 0.16; 'received:66.111': 0.16; 'received:66.111.4': 0.16; 'received:io': 0.16; 'received:messagingengine.com': 0.16; 'received:psf.io': 0.16; 'wrote:': 0.16; 'string': 0.17; 'odd': 0.18; 'algorithm': 0.20; 'purposes': 0.20; 'function,': 0.22; 'this:': 0.23; 'header :In-Reply-To:1': 0.24; "doesn't": 0.26; "i'm": 0.30; 'statement': 0.32; 'problem': 0.33; "d'aprano": 0.33; 'errors,': 0.33; 'steven': 0.33; 'could': 0.35; 'returning': 0.35; 'but': 0.36; 'skip:i 20': 0.36; 'there': 0.36; 'cases': 0.36; 'to:addr:python- list': 0.36; 'subject:: ': 0.37; 'received:10': 0.37; 'received:66': 0.38; 'end': 0.39; 'subject:the': 0.39; 'rather': 0.39; 'to:addr:python.org': 0.40; 'header:Message-Id:1': 0.61; 'more': 0.63; 'special': 0.73; 'yours': 0.89 |
| DKIM-Signature | v=1; a=rsa-sha1; c=relaxed/relaxed; d=fastmail.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-sasl-enc :x-sasl-enc; s=mesmtp; bh=66apGcnhfAIHavHRJzLOQJQaOJc=; b=Ugsu2m SLbcpjMBEjcQVkKqYIVGcOdN8UCB5WyHczM1IfL1VqfFNRR3eG4GzTpcJSmeO0HR CumUDEu77a0RU7iV2BUDz4NNoUwzx1ZIT0LqsX0fKAH0IcEEPaHFRfhoZEBRsKli 8e3m6MiHDBPPlCJpXkhKedeS4PFZ1j/n+57bo= |
| DKIM-Signature | v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=66apGcnhfAIHavH RJzLOQJQaOJc=; b=Ws+pxI5t4+PP9s9zBRzKU5CXrKbzl+hauROubbjBPScmTl9 oknlfyR2AYelmHCvkhXZZ1dkE8BL1bRDploD93JTXevHWn07JPfchU5SFWd4GEwn rDOI9d6fD/t1l05SYfyeq7/Jofq5dRRZeBvxnStLlBy0uheXseDYjiKSqcJQ= |
| X-Sasl-Enc | +VZaEw0Tl8AG3HsdHgvorw9b+JJqXVCNUYhO3gea3IjC 1463606923 |
| X-Mailer | MessagingEngine.com Webmail Interface - ajax-9bce2c97 |
| In-Reply-To | <573c8e97$0$1596$c3e8da3$5496439d@news.astraweb.com> |
| X-BeenThere | python-list@python.org |
| X-Mailman-Version | 2.1.22 |
| Precedence | list |
| List-Id | General discussion list for the Python programming language <python-list.python.org> |
| List-Unsubscribe | <https://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe> |
| List-Archive | <http://mail.python.org/pipermail/python-list/> |
| List-Post | <mailto:python-list@python.org> |
| List-Help | <mailto:python-list-request@python.org?subject=help> |
| List-Subscribe | <https://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe> |
| X-Mailman-Original-Message-ID | <1463606923.1353025.611955401.37F5D0F6@webmail.messagingengine.com> |
| X-Mailman-Original-References | <573c8e97$0$1596$c3e8da3$5496439d@news.astraweb.com> |
| Xref | csiph.com comp.lang.python:108785 |
Show key headers only | View raw
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