簡體   English   中英

如何在python中的嵌套列表中刪除特定元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM