2016-12-14 229 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通过索引删除它。

希望这会有所帮助!