2016-12-14 2 views
0

Скажем, я получил следующий массив:Как удалить отдельные элементы вложенных списков в Python

array = [[1, 2, 3, 1], 
     [4, 5, 6, 4], 
     [7, 8, 9, 7], 
     [7, 8, 9, 7]] 

Я хочу, чтобы удалить первый и последний список в массиве и чем первый и последний элемент середины списки (возврат должен в основном быть: [[5, 6], [8, 9]]).

Я попытался следующие:

array.remove(array[0]) 
array.remove(array[-1]) 
for i in array: 
    array.remove(i[0]) 
    array.remove(i[-1]) 

Но я всегда получаю ValueError: list.remove(x): x not in list. Зачем?

ответ

1

Простой способ для того чтобы достигнуть этой цели является порезать список array используя список понимание выражения, как:

array = [[1, 2, 3, 1], 
     [4, 5, 6, 4], 
     [7, 8, 9, 7], 
     [7, 8, 9, 7]] 

array = [a[1:-1]for a in array[1:-1]] 

Final удерживать значение по array будет:

[[5, 6], [8, 9]] 

Здесь array[1:-1] возвращает список, пропускающий первый и последний элементы из array список

+1

Помните, что понимание списка создает новый список вместо мутаций оригинала, как в случае с OP –

1

Вы должны удалить элементы из подсписка, а не родительский список:

for i in array: 
    i.remove(i[0]) 
    i.remove(i[-1]) 

Вы также можете удалить оба элемента в одной строке с помощью del:

>>> for i in array: 
... del i[0], i[-1] 
>>> array 
[[5, 6], [8, 9]] 
+0

Вот что я искал, так глупо. Большое спасибо! –

+0

@ MickeyMahoney Если это помогло, вы можете подумать о принятии :) –

1

Использование NumPy

import numpy as np 

array = np.array(array) 
array[1:3, 1:3] 

возвращение

array([[5, 6], 
     [8, 9]]) 
0

Или с <list>.pop:

array = [[1, 2, 3, 1], 
     [4, 5, 6, 4], 
     [7, 8, 9, 7], 
     [7, 8, 9, 7]] 

for i in range(len(array)): # range(len(<list>)) converts 'i' to the list inedx number. 
    array[i].pop(0) 
    array[i].pop(-1) 

Чтобы ответить на ваш вопрос,

.remove удаляет первое совпадающее значение, а не конкретный индекс. Где .pop удаляет его по индексу.

Надеюсь, это поможет!

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