Lucky numbers in Python

Ian Kelly ian.g.kelly at gmail.com
Wed Apr 29 23:08:36 EDT 2015


On Wed, Apr 29, 2015 at 6:11 PM, Steven D'Aprano
<steve+comp.lang.python at pearwood.info> wrote:
> On Thu, 30 Apr 2015 05:57 am, Ian Kelly wrote:
>
>> On Wed, Apr 29, 2015 at 12:24 PM, Cecil Westerhof <Cecil at decebal.nl>
>> wrote:
>>> I was wondering if there is a way to do this:
>>>             for del_index in range((sieve_len // skip_count) * skip_count
>>>             - 1,
>>>                                   skip_count - 2, -skip_count):
>>>                 del sieve[del_index]
>>> in a more efficient way.
>>
>> You can delete using slices.
>>
>> del sieve[(sieve_len // skip_count) * skip_count - 1 : skip_count - 2
>> : -skip_count]
>>
>> Now you no longer need to do the iteration in reverse, which makes the
>> slicing simpler:
>>
>> del sieve[skip_count - 1 : (sieve_len // skip_count) * skip_count :
>> skip_count]
>
> True, but *probably* at the expense of speed. When you delete items from a
> list, the remaining items have to be moved, which takes time, especially
> for very large lists.
>
> Most of the time, rather than deleting items, it is faster to set them to a
> placeholder (for example None) and then copy the ones which aren't None in
> a separate loop:

You're correct, but I think this would be difficult to apply to the
OP's algorithm since the list indexing depends on the items from
previous iterations having been removed.



More information about the Python-list mailing list