Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #108785

Re: Extract the middle N chars of a string

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 | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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