2016-04-05 2 views
3

Мне нужно нарезать список списков в python.slicing список списков в Python

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

Код, приведенный выше, не дает мне правильного выхода.

Что я хочу: [[1,2,3],[1,2,3],[1,2,3]]

+0

Где вы видите логику в вашем вопросе используется? Также почему 'slice (0,4)' дает вам три элемента в подсписке, если это действительно срабатывает? –

ответ

7

С NumPy это очень просто - вы можете просто выполнить срез:

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]]) 

Вы могли бы, конечно, превратить numpy.array обратно в list:

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

Я бы сказал 'A [:,: 3] .tolist()' – MaxU

+0

@MaxU, обновлено, спасибо! – soon

1

вы можете использовать список понимание таких как: [x[0:i] for x in A] где i является 1,2,3 и т.д. в зависимости от того, сколько элементов вам нужно.

+0

, который должен быть 'x [idx]' с кодом OPs –

+0

Почему? ему нужны первые элементы idx из каждого списка. – Sid

+0

@WayneWerner правильно, но я изменил значение idx ... вместо среза это raw int – Sid

0

Либо:

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

Или:

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

В то время как * * * решает проблему OPs, я сомневаюсь, что это то, ради чего они шли. –

+0

@WayneWerner см. Обновление plz :) – haifzhan

7

Очень редко с использованием объектов ломтика легче читать, чем используя список понимание, и это не один из тех случаев.

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

Это очень ясно. Для каждого подписок в A дайте мне список первых четырех элементов.

Смежные вопросы