[Tutor] List Splicing

Emile van Sebille emile at fenx.com
Thu Jun 18 02:30:39 CEST 2009


On 6/17/2009 5:11 PM Robert Berman said...
> Emille,
> 
> Thank you for the example of list splicing.  Do you know if this is  
> faster than a more conventional loop statement

Faster can be exactly determined using timeit.  (for some definition of 
exact -- the one we use mostly around here anyway)

So, for the bits you want to know faster about, you'd do something like:

 >>> from timeit import Timer
 >>> t = Timer("aa = range(0,100,2)")
 >>> t.timeit()
1.6688069739620928
 >>> t = Timer("aa = range(100)[::2]")
 >>> t.timeit()
3.3360306112492282
 >>>

I'm not sure this applies specifically to what you're doing, and 
crafting what you are timing is important, but read up on timeit and try 
it out.


> as in my code for 
> primearray which is in my original post (reprinted here)

Well, there's the confusion.  This is the code for something called 
BuildSieve.  In your prior post you show:

-----
Printing a range, say primearray[21]
through primearray[50] will give you all prime numbers between 21 and
50.

23
29
31
37
41
43
47
-----

... but this isn't what BuildSieve yields:

 >>> BuildSieve(20)
[0, 0, 2, 3, 0, 5, 0, 7, 0, 0, 0, 11, 0, 13, 0, 0, 0, 17, 0, 19, 0]

So I still don't know what primearray is/does.

Emile

> 
> The code is as follows:
> 
> def BuildSieve(itemsin):
>     TheSieve=list()
>     TheSieve = range(0,itemsin+1)
>     TheSieve[1]=0
>     for i in range(2,itemsin+1):
>         if (TheSieve[i] > 0):
>             j = i + i
>             while (j <= itemsin):
>                 TheSieve[j] = 0
>                 j+=i
>     return TheSieve
> 
> It is called with PrimaryList = BuildSieve(1000000)
> 
> Again, thank you for your help.
> 
> Robert
> 
> 
> On Wed, 2009-06-17 at 17:01 -0700, Emile van Sebille wrote:
>> On 6/17/2009 4:48 PM Robert Berman said...
>> > Emile,
>> > 
>> > Thank your for your comments. I do have a list running from 0-1000001.
>> > Yes, it is true, I only needed 0 - 100000 and yes I will change it.
>> > However, if you use primearray 
>>
>> you haven't posted the primearray code...
>>
>> <snip>
>> > 
>> > However, for the time being, can you perhaps share some suggestions on
>> > list splicing?
>>
>> So, this part of your original post--
>>  > Out[53]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>  >
>>  > Since 3 is a prime, we can eliminate all multiples of 3. Within l1,
>>  > these are expressed as
>>  >
>>  > In [52]: l1[n+n:len(l1):n]
>>  > Out[52]: [6, 9, 12]
>>  >
>>  > when n = 3. ( do know 12 would have been eliminated by the prime
>>  > number 2)
>>  >
>>  > It would be great if I could say l1[n+n:len(l1):n] = 0
>>
>> but you can say:
>>
>> for ii in l1[n+n:len(l1):n]: l1[ii] = 0
>>
>> Is something like that what you're after?
>>
>> Emile
>>
>>
>>
>>  > but obviously
>>  >
>>  > that will fail for obvious reasons. I am looking for the right hand
>>  > side of the statement to set a list within the list to all zeros.
>> ---
>>
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org <mailto:Tutor at python.org>
>> http://mail.python.org/mailman/listinfo/tutor
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor



More information about the Tutor mailing list