Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!news.stack.nl!newsfeed.xs4all.nl!newsfeed2.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.046 X-Spam-Evidence: '*H*': 0.91; '*S*': 0.00; 'mrab': 0.05; 'repeated': 0.07; 'satisfy': 0.09; 'second.': 0.09; 'subtract': 0.09; 'resulting': 0.13; 'roy': 0.16; 'set,': 0.16; 'subject:sample': 0.16; 'values:': 0.16; 'wrote:': 0.17; 'items.': 0.17; 'typical': 0.17; 'sets': 0.23; 'split': 0.23; 'header:In-Reply-To:1': 0.25; 'header:User-Agent:1': 0.26; 'am,': 0.27; 'way?': 0.29; 'convert': 0.29; 'could': 0.32; 'to:addr:python-list': 0.33; 'another': 0.33; 'list': 0.35; 'collecting': 0.35; 'subject:?': 0.35; 'there': 0.35; 'next': 0.35; 'list.': 0.35; 'but': 0.36; '(i.e.': 0.36; 'smaller': 0.36; 'should': 0.36; 'best,': 0.37; 'item': 0.37; 'subject:: ': 0.38; 'some': 0.38; 'sure': 0.38; 'to:addr:python.org': 0.39; 'received:192': 0.39; 'list,': 0.39; 'received:192.168': 0.40; 'your': 0.60; 'first': 0.61; 'back': 0.62; 'between': 0.63; 'more': 0.63; 'offer': 0.65; 'header:Reply- To:1': 0.68; 'received:74.208': 0.71; 'smith': 0.71; 'reply-to:no real name:2**0': 0.72; 'received:74.208.4.194': 0.84; '100,000': 0.91 Date: Fri, 11 Jan 2013 10:14:15 -0500 From: Dave Angel User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121011 Thunderbird/16.0.1 MIME-Version: 1.0 To: python-list@python.org Subject: Re: Multiple disjoint sample sets? References: <50F02389.70507@mrabarnett.plus.com> In-Reply-To: <50F02389.70507@mrabarnett.plus.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Provags-ID: V02:K0:8RlghNz13lBPX3sESexlgrb59rzDzoo2m6to0l+mwUm g42HA0vi2OgN77+/fd/DgHIb/tPQ1sPuVJ26uSYHUizUn/HKwd nrc7YcPD84QaAuOyefBZoamOaCxkpqj1MIj0RRxnWs/yCqHZWn LFVz04I6YP4/9xx5cuXafls/1j0VuCVDz31UI1+Nvbi4pV0iKi Q2sNxutCnk64KMOYQH7GXgdqy5vWrwzlrphm8bW+Ztkxf3oYfv XmrxrRpf0B5gYCOlZe8ySfOMPEAmwsZDJipd+3K4mFUmNNrSmp 6qsAcVIAog9cTchsCbyrIxIu+qS7b75bO7jLDHowtmHqPsuEQ= = X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: d@davea.name 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: 34 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1357917280 news.xs4all.nl 6892 [2001:888:2000:d::a6]:42656 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:36627 On 01/11/2013 09:36 AM, MRAB wrote: > On 2013-01-11 14:15, Roy Smith wrote: >> I have a list of items. I need to generate n samples of k unique items >> each. I not only want each sample set to have no repeats, but I also >> want to make sure the sets are disjoint (i.e. no item repeated between >> sets). >> >> random.sample(items, k) will satisfy the first constraint, but not the >> second. Should I just do random.sample(items, k*n), and then split the >> resulting big list into n pieces? Or is there some more efficient way? >> >> Typical values: >> >> len(items) = 5,000,000 >> n = 10 >> k = 100,000 >> > I don't know how efficient it would be, but couldn't you shuffle the > list and then use slicing to get the samples? I like that answer best, but just to offer another choice... You start with a (presumably unique) list of items. After collecting your first sample, you could subtract them from the list, and use the smaller list for the next sample. One way is to convert list to set, subtract, then convert back to list. -- DaveA