On 1 Mag, 05:35, Steven D'Aprano <st...@remove-this- cybersource.com.au> wrote:
> > def transfer_stock(stock_code, old_list, new_list): > """ Transfer a stock from one list to another """ > while True: # loop forever > try: > i = old_list.index(stock_code) > except ValueError: > # not found, so we're done > break > new_list.append(old_list[i]) > del old_list[i] > return new_list > > -- > Steven I think this could be slower than doing like the OP, since 'index' rescan the whole list every time while doing an explicit loop you only scan the list once. Anyway i think that list.extract( old_list, predicate ) -> new_list would be a nice addition to the standard library (possibly a C faster version of what one could implement in python) ... and since the library is not under moratorium maybe we will have it ... the semantic could be like th OP asked: --- code begins class ListE(list): def extract(self, predicate): res = [] for idx, el in enumerate(self): if predicate(el): res.append( self.pop(idx) ) return res class Stock(object): def __init__(self, code): self.code = code def __repr__(self): return "Stock: code=%d" % self.code l = ListE( Stock(n) for n in range(19) ) subl = l.extract( lambda x: x.code in (1,4, 9) ) print " l = ", l print "subl = ", subl --- code ends --- results l = [Stock: code=0, Stock: code=2, Stock: code=3, Stock: code=5, Stock: code=6, Stock: code=7, Stock: code=8, Stock: code=10, Stock: code=11, Stock: code=12, Stock: code=13, Stock: code=14, Stock: code=15, Stock: code=16, Stock: code=17, Stock: code=18] subl = [Stock: code=1, Stock: code=4, Stock: code=9] Ciao --- FB -- http://mail.python.org/mailman/listinfo/python-list