[英]How to remove specific elements in nested lists in 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
。 為什么?
實現此目的的簡單方法是使用列表理解表達式對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]
返回列表,跳過array
列表中的第一個和最后一個元素
您應該從子列表而不是父列表中刪除項目:
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]]
使用numpy
import numpy as np
array = np.array(array)
array[1:3, 1:3]
返回
array([[5, 6],
[8, 9]])
或者,使用<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
刪除第一個匹配值,而不是特定的索引。 其中as .pop
通過索引將其刪除。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.