Fast Efficient way to transfer an object to another list
MRAB
python at mrabarnett.plus.com
Sat May 1 11:08:22 EDT 2010
Tim Chase wrote:
> On 04/30/2010 10:35 PM, Steven D'Aprano wrote:
>> If you know there is one, and only one, item with that stock code:
>>
>> def transfer_stock(stock_code, old_list, new_list):
>> """ Transfer a stock from one list to another """
>> i = old_list.index(stock_code) # search
>> new_list.append(old_list[i]) # copy
>> del old_list[i] # delete
>> return new_list
>
> This could be written as
>
> def move(code, source, dest):
> dest.append(source.pop(source.index(code)))
> return dest
>
> depending on how one thinks. I tend to prefer
>
> lst.pop(idx)
>
> over
>
> tmp = lst[idx]
> del lst[idx]
>
> only using the latter if "idx" is a range/slice.
>
> Though since the function mutates the arguments, I'd be tempted to
> return None like list.sort() does for the same rationale.
>
> If more than one item is in the source, it will move/remove the first
> leaving the remainder; if no matching item is in the source it will
> appropriately raise a ValueError.
>
It would be more efficient if instead of deleting or popping the item
you moved the last one into its place:
if idx == len(source) - 1:
item = source.pop()
else:
item = source[idx]
source[idx] = source.pop()
assuming that the order of the items in the list doesn't matter.
More information about the Python-list
mailing list