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.
--
http://mail.python.org/mailman/listinfo/python-list