21

I need to slice a list of lists:

A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
idx = slice(0,4)
B = A[:][idx]

The code above isn't giving me the right output.

What I want is: [[1,2,3],[1,2,3],[1,2,3]]

1
  • 1
    Where did you see the logic in your question being used? Also why would slice(0,4) give you three elements per sublist if it did happen to work? Commented Apr 5, 2016 at 20:36

6 Answers 6

26

Very rarely using slice objects is easier to read than employing a list comprehension, and this is not one of those cases.

>>> A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
>>> [sublist[:3] for sublist in A]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

This is very clear. For every sublist in A, give me the list of the first three elements.

Sign up to request clarification or add additional context in comments.

Comments

21

With numpy it is very simple - you could just perform the slice:

In [1]: import numpy as np

In [2]: A = np.array([[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]])

In [3]: A[:,:3]
Out[3]: 
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])

You could, of course, transform numpy.array back to the list:

In [4]: A[:,:3].tolist()
Out[4]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

Comments

3
A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]

print [a[:3] for a in A]

Using list comprehension

Comments

1

you can use a list comprehension such as: [x[0:i] for x in A] where i is 1,2,3 etc based on how many elements you need.

4 Comments

Why? he needs the first idx elements from each list.
@WayneWerner correct but I changed the meaning of idx...instead of the slice it's a raw int
the OP is defining idx = slice(0,4), not 4.
fixed to change the name of idx to i
0

Either:

>>> [a[slice(0,3)] for a in A]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

Or:

>>> [list(filter(lambda x: x<=3, a)) for a in A]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

1 Comment

While that does solve the OPs problem, I doubt it was what they were going for.
-1

Here is my code:

A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
print(A[0][0:3],A[1][0:3],A[1][0:3])

1 Comment

Welcome to StackOverflow! While this prints what HuckleberryFinn wrote he wanted, he wanted it without mentioning the indices of A, using a slice object for the 2nd dimension. There's an error in your third argument to print().

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.