一尘不染

索引所有*除外* python中的一项

python

有没有一种简单的方法来索引列表(或数组,或其他)中 特定索引 之外的 所有元素?例如,

  • mylist[3] 将把该物品退回位置3

  • milist[~3] 将返回整个列表,除了3


阅读 142

收藏
2020-12-20

共1个答案

一尘不染

对于 列表 ,您可以使用列表组合。例如,要制作不含第3个元素b的副本a

a = range(10)[::-1]                       # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
b = [x for i,x in enumerate(a) if i!=3]   # [9, 8, 7, 5, 4, 3, 2, 1, 0]

这是非常通用的方法,可以与所有可迭代对象(包括numpy数组)一起使用。如果要更换[]()b将是一个迭代器,而非列表。

或者,您可以通过以下方式就地完成此操作pop

a = range(10)[::-1]     # a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
a.pop(3)                # a = [9, 8, 7, 5, 4, 3, 2, 1, 0]

numpy中, 您可以使用布尔索引进行此操作:

a = np.arange(9, -1, -1)     # a = array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
b = a[np.arange(len(a))!=3]  # b = array([9, 8, 7, 5, 4, 3, 2, 1, 0])

通常,这比上面列出的列表理解要快得多。

2020-12-20