Moving items from list to list

H

HMS Surprise

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
 
E

Evan Klitzke

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].
 
H

HMS Surprise

Thanks.

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

jh
 
G

George Sakkis

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]
[0, 1, 2, 3, 5, 6, 7, 9] [4, 8]


HTH,
George
 
G

Gabriel Genellina

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top