假设我有一个列表,看起来像:
x = [1, 0, 0, 1, 1, 1, 0, 0, 0, 0]
然后我有另一个列表,其中的索引需要从列表x
中删除:
x_remove = [1, 4, 5]
然后我可以使用numpy
命令delete
将其从x
中删除,并最终得到:
x_final = np.delete(x, x_remove)
>>> x_final = [0, 0, 1, 0, 0, 0, 0]
到目前为止还不错。现在我发现我不想使用整个列表x
,而是从索引2开始。所以基本上:
x_new = x[2:]
>>> x_new = [0, 1, 1, 1, 0, 0, 0, 0]
但是,我仍然需要从x_remove
列表中删除索引,但是现在,正如您所看到的,索引的位置与以前不同,因此删除了错误的项。同样的事情也会发生,如果我用另一种方法(即先删除索引,然后使用slice从索引2开始)。所以基本上它会/应该是这样的:
x_new_final = [0, 1, 1, 0, 0] (first use slice, and the remove list)
x_new_final_v2 = [1, 0, 0, 0, 0] (first use remove list, and then slice)
x_new_final_correct_one = [0, 1, 0, 0, 0, 0] (as it should be)
那么,有没有什么方法可以让我从不同的索引(通过切片)开始我的列表,并且仍然使用delete
命令删除与完整列表相对应的正确索引呢?你知道吗
试试这个简单的方法。。。你知道吗
您可以根据切片位置更改xu remove列表。例如:
首先,让我们探讨一下简单删除的替代方法(不考虑起始位置的更改问题):
首先用唯一且易于识别的值创建一个
x
:一个列表理解方法-也许不是最快的,但相当清楚,没有bug:
你的
np.delete
方法:它的缺点是将
x
转换为数组,这不是一项简单的任务(时间方面)。它还生成了一个新数组。我猜是慢了点。你知道吗就地清除:
哦-错了。我们需要从头开始(最大索引)。这是一个众所周知的Python“食谱”:
在幕后
np.delete
采取了一种蒙蔽的方式:现在来讨论将
x_remove
应用于x
片的问题。x
的切片没有切片参数的记录。也就是说,您不能轻易确定y = x[2:]
缺少两个值。(好吧,我可以通过比较x
和y
的一些属性来推断,但不能仅从y
来推断)。你知道吗因此,无论如何进行删除,都必须首先调整
x_remove
的值。你知道吗这是可行的,但是
-1
可能是一个问题。我们不希望它意味着the last element
。所以为了安全,我们必须先过滤掉阴性指标。你知道吗如果
delete
不忽略负指数,它可能会得到这样一个掩码-末尾有一个False
:相关问题 更多 >
编程相关推荐