472,986 Members | 2,884 Online

# Moving items from list to list

Just wondered if there was some python idiom for moving a few items
from one list to another. I often need to delete 2 or 3 items from one
list and put them in another. Delete doesn't seem to have a return
value. I don't care which items I get so now I just use a couple of
pops or a for loop for more than two.

Thanks

jh

Jun 14 '07 #1
4 14171
On 6/14/07, HMS Surprise <jo**@datavoiceint.comwrote:
>
Just wondered if there was some python idiom for moving a few items
from one list to another. I often need to delete 2 or 3 items from one
list and put them in another. Delete doesn't seem to have a return
value. I don't care which items I get so now I just use a couple of
pops or a for loop for more than two.
I'm not sure if this is what you're asking, but if the elements in the
list are contiguous you can just use list slicing/addition, like this:

a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]

b = a[2:] + b
a = a[:2]

Now the contents of a and b respectively are a = [1, 2] and b = [3, 4,
5, 6, 7, 8, 9, 10].

--
Evan Klitzke <ev**@yelp.com>
Jun 14 '07 #2
Thanks.

That will work. The 2nd, smaller lst starts out empty but this is

jh

Jun 14 '07 #3
On Jun 14, 12:30 pm, HMS Surprise <j...@datavoiceint.comwrote:
Just wondered if there was some python idiom for moving a few items
from one list to another. I often need to delete 2 or 3 items from one
list and put them in another. Delete doesn't seem to have a return
value. I don't care which items I get so now I just use a couple of
pops or a for loop for more than two.

Thanks

jh
>>x = range(10)
y = []
>>y.append(x.pop(4))
print x, y
[0, 1, 2, 3, 5, 6, 7, 8, 9] [4]
>>y.append(x.pop(7))
print x, y
[0, 1, 2, 3, 5, 6, 7, 9] [4, 8]
HTH,
George

Jun 14 '07 #4
En Thu, 14 Jun 2007 14:23:14 -0300, Evan Klitzke <ev**@yelp.comescribió:
On 6/14/07, HMS Surprise <jo**@datavoiceint.comwrote:
>>
Just wondered if there was some python idiom for moving a few items
from one list to another. I often need to delete 2 or 3 items from one
list and put them in another. Delete doesn't seem to have a return
value. I don't care which items I get so now I just use a couple of
pops or a for loop for more than two.

I'm not sure if this is what you're asking, but if the elements in the
list are contiguous you can just use list slicing/addition, like this:

a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]

b = a[2:] + b
a = a[:2]

Now the contents of a and b respectively are a = [1, 2] and b = [3, 4,
5, 6, 7, 8, 9, 10].
When lists become large this is less convenient because it has to build
three intermediate lists. At least on my box, pop+append is 5 orders of
magnitude faster (but as shown on another posts, you should test on your
box to see what happens):

c:\temp>call python -m timeit -s "a=range(1000000);b=range(1000)"
"b.append(a.po
p())"
1000000 loops, best of 3: 1.35 usec per loop

c:\temp>call python -m timeit -s "a=range(1000000);b=range(1000)"
"b+=a[-1:];a=a
[:-1]"
10 loops, best of 3: 107 msec per loop

c:\temp>call python -m timeit -s "a=range(1000000);b=range(1000)"
"b.append(a[-1
]);a=a[:-1]"
10 loops, best of 3: 107 msec per loop

c:\temp>call python -m timeit -s "a=range(1000000);b=range(1000)"
"b.append(a[0]
);a=a[1:]"
10 loops, best of 3: 110 msec per loop

--
Gabriel Genellina

Jun 14 '07 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

### Similar topics

 12 by: Kevin Blount | last post by: I'm playing with dragable