Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!news.stack.nl!newsfeed.xs4all.nl!newsfeed2a.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.007 X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'python': 0.11; 'all?': 0.16; 'personally,': 0.16; 'received:80.91.229.3': 0.16; 'received:dip0.t-ipconnect.de': 0.16; 'received:plane.gmane.org': 0.16; 'received:t-ipconnect.de': 0.16; 'subject:bit': 0.16; 'sure.': 0.16; 'wrote:': 0.18; 'replacing': 0.19; 'seems': 0.21; 'tests': 0.22; 'header:User-Agent:1': 0.23; "haven't": 0.24; 'second': 0.26; 'header:X-Complaints-To:1': 0.27; 'fastest': 0.30; "i'm": 0.30; "skip:' 10": 0.31; 'clever': 0.31; 'index,': 0.31; 'run': 0.32; 'but': 0.35; 'there': 0.35; 'doing': 0.36; 'unit': 0.37; 'too': 0.37; 'to:addr:python-list': 0.38; 'to:addr:python.org': 0.39; 'received:org': 0.40; 'easy': 0.60; 'catch': 0.60; 'further': 0.61; 'first': 0.61; 'email addr:gmail.com': 0.63; 'milliseconds': 0.84 X-Injected-Via-Gmane: http://gmane.org/ To: python-list@python.org From: Peter Otten <__peter__@web.de> Subject: Re: A curious bit of code... Date: Thu, 13 Feb 2014 20:43:58 +0100 Organization: None References: <4cc09129-43ee-4205-a24c-03f92b594abc@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7Bit X-Gmane-NNTP-Posting-Host: p57bdb989.dip0.t-ipconnect.de User-Agent: KNode/4.7.3 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 39 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1392320644 news.xs4all.nl 2865 [2001:888:2000:d::a6]:50088 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:66218 forman.simon@gmail.com wrote: > I ran across this and I thought there must be a better way of doing it, > but then after further consideration I wasn't so sure. > > if key[:1] + key[-1:] == '<>': ... > > > Some possibilities that occurred to me: > > if key.startswith('<') and key.endswith('>'): ... > > and: > > if (key[:1], key[-1:]) == ('<', '>'): ... > > > I haven't run these through a profiler yet, but it seems like the original > might be the fastest after all? $ python -m timeit -s 's = ""' 's[:1]+s[-1:] == "<>"' 1000000 loops, best of 3: 0.37 usec per loop $ python -m timeit -s 's = ""' 's[:1] == "<" and s[-1:] == ">"' 1000000 loops, best of 3: 0.329 usec per loop $ python -m timeit -s 's = ""' 's.startswith("<") and s.endswith(">")' 1000000 loops, best of 3: 0.713 usec per loop The first is too clever for my taste. The second is fast and easy to understand. It might attract "improvements" replacing the slice with an index, but I trust you will catch that with your unit tests ;) Personally, I'm willing to spend the few extra milliseconds and use the foolproof third.