On Tuesday 31 May 2016 14:27, Sayth Renshaw wrote: > > Hi > > What is the best way to inplace alter a list going into a postgres database
Is it relevant where it is going? What you do with the list after you alter it is irrelevant -- perhaps you will insert it into an Oracle database, or a place it in a dict, or print it. The only reason it might be relevant is if Postgres can do the work for you, so you don't need to split it in Python. And that's probably a question for a Postgres group, not a Python group. > using split but being sure that the order of items remains correct. To modify a list *in place* is tricky. You can use slicing, which is easy, but because the size of the list changes you need to work backwards from the end. I will use 'x' for fields that don't change, and suppose you wish to split fields 9, 10, 11 and 12. (Remember that Python counts starting from 0, not 1.) L = ['x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', '11-3-1-4 $72390.00', '2-0-0-2 $8970.00', '3-2-0-0 $30085.00', '3-1-0-0 $15450.00', 'x', 'x', 'x' ] for index in (12, 11, 10, 9): # must process them in *reverse* order item = L[index] values = item.replace('-', ' ').split() L[index:index+1] = values # slice assignment Perhaps a better way is to build a new list: L = ['x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', '11-3-1-4 $72390.00', '2-0-0-2 $8970.00', '3-2-0-0 $30085.00', '3-1-0-0 $15450.00', 'x', 'x', 'x'] new = [] for i, item in enumerate(L): if i in (9, 10, 11, 12): values = item.replace('-', ' ').split() new.extend(values) else: new.append(values) You can then replace L with new *in-place* with a slice: L[:] = new or just use new instead. -- Steve -- https://mail.python.org/mailman/listinfo/python-list