On Wed, Apr 29, 2015 at 6:11 PM, Steven D'Aprano <steve+comp.lang.pyt...@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 <ce...@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. -- https://mail.python.org/mailman/listinfo/python-list