Lucky numbers in Python
ian.g.kelly at gmail.com
Thu Apr 30 05:08:36 CEST 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>
>>> 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 :
> 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