2016-12-14 278 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]] 

通過array終值保持爲:

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

這裏array[1:-1]返回從跳過第一個和最後一個元素的列表列表

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

return

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通過索引刪除它。

希望這會有所幫助!