Neatu Ovidiu Gabriel wrote: > The list.pop(index) returns the element represented by the index and also > reduces the list by removing that element. So it a short one liner for > doing both things. But when it comes for popping a slice of the list there > is nothing similar for doing in that simple way. > > If you want to remove a slice and also reduce the list you will have > something like this: > > a_list, a_slice = a_list[:size], a_list[size:] > > or even worser if you try to do the same for something in the middle. > > My proposal is the extension of list.pop for accepting a way for popping > slices. > > When doing this: > > a_list.pop(i,j) > > pop will return the slice [i,j] and remove it from the list. > > For popping from an index to the end: > > a_list.pop(i, len(a_list)) > > Or even emptying the whole list: > > a_list.pop(0, len(a_list)) > > > So this is it :)
You'd use 'del' to remove a slice from a list. So: >>> def pop_slice(items, *indices): ... x = slice(*indices) ... result = items[x] ... del items[x] ... return result ... >>> items = range(10) >>> pop_slice(items, 3) [0, 1, 2] >>> items [3, 4, 5, 6, 7, 8, 9] >>> pop_slice(items, 3, 4) [6] >>> items [3, 4, 5, 7, 8, 9] >>> pop_slice(items, None, None, 2) [3, 5, 8] >>> items [4, 7, 9] But what's your use case? Does it occur often enough that you cannot afford a two-liner like result = items[start:stop] del items[start:stop] ? -- http://mail.python.org/mailman/listinfo/python-list