Path: csiph.com!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail From: Erik Newsgroups: comp.lang.python Subject: Re: repeat items in a list Date: Mon, 28 Mar 2016 23:14:07 +0100 Lines: 30 Message-ID: References: <8935d5dc-5e62-4fa8-8e8f-bd5b1787ee9f@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Trace: news.uni-berlin.de E363+vh+SZsb560OsNVnAwECzBspLs/7JC5lyl1UrFTg== Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.025 X-Spam-Evidence: '*H*': 0.95; '*S*': 0.00; 'nicely': 0.07; 'trailing': 0.07; 'cc:addr:python-list': 0.09; 'cached': 0.09; 'construct.': 0.16; 'from:addr:python': 0.16; "he'd": 0.16; 'interest,': 0.16; 'received:84.93': 0.16; 'received:84.93.230': 0.16; 'received:io': 0.16; 'received:psf.io': 0.16; 'timed': 0.16; 'wrote:': 0.16; 'cc:2**0': 0.20; 'cc:addr:python.org': 0.20; 'object.': 0.22; 'header:In-Reply-To:1': 0.24; 'header:User-Agent:1': 0.26; 'example': 0.26; 'subject:list': 0.26; 'sense': 0.26; 'chris': 0.26; 'error': 0.27; 'went': 0.28; 'looks': 0.29; 'referenced': 0.29; "i'm": 0.30; 'anywhere': 0.30; 'creating': 0.30; 'code': 0.30; "i'd": 0.31; 'probably': 0.31; "can't": 0.32; 'noticed': 0.32; 'received:84': 0.32; 'though.': 0.33; 'list': 0.34; 'instance': 0.35; 'mine': 0.35; 'something': 0.35; 'problem.': 0.35; 'but': 0.36; '(and': 0.36; 'faster': 0.36; 'subject:: ': 0.37; 'say': 0.37; 'version': 0.38; 'takes': 0.39; 'received:192': 0.39; 'some': 0.40; 'charset:windows-1252': 0.62; 'else.': 0.66; '(generic': 0.84; 'expresses': 0.84; 'goal:': 0.84; 'measurable': 0.84; 'quicker': 0.84; 'analyses': 0.91; 'glance': 0.91; 'convinced': 0.93 X-CM-Score: 0.00 X-CNFS-Analysis: v=2.1 cv=QqujpgGd c=1 sm=1 tr=0 a=BtX40c5qGHjBwFgnk142hQ==:117 a=BtX40c5qGHjBwFgnk142hQ==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=N659UExz7-8A:10 a=5Ue3kRELu8KOH2t3GbQA:9 a=pILNOxqGKmIA:10 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 In-Reply-To: X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com comp.lang.python:105929 On 28/03/16 22:25, Chris Angelico wrote: > Just out of interest, did you (generic you) happen to notice Mark's > suggestion? It's a one-liner that nicely expresses the intention and > accomplishes the goal: > > yy = [aa for aa in xx for _ in range(nrep)] > > It quietly went through without fanfare, but I would say this is the > perfect solution to the original problem. I noticed it (and I timed it - it was ~30% faster than my version (because mine was creating short transient list objects), but it takes a _LOT_ - millions - of iterations of the example case (nrep = 3, xx = two-element-list) to even make it measurable on my PC). It would have probably been even quicker if he'd cached the range() object. I'm not convinced it's particularly intuitive, though. That trailing "for _ in range(nrep)" looks at first glance like an error - some code that's generating a value that is not referenced anywhere else. It makes perfect sense when one analyses it, but it's not the most immediately grokkable construct. Hmmm. It's almost as if in this instance I'd prefer something like: yy = [for aa in xx for _ in range(nrep): aa] But I know we can't go /there/ ;) E.