Existe-t-il un moyen simple d'indexer tous les éléments d'une liste (ou d'un tableau, ou autre) ? sauf pour un indice particulier ? Par exemple,
-
mylist[3]
renvoie l'élément en position 3 -
milist[~3]
renvoie toute la liste à l'exception de 3
Existe-t-il un moyen simple d'indexer tous les éléments d'une liste (ou d'un tableau, ou autre) ? sauf pour un indice particulier ? Par exemple,
mylist[3]
renvoie l'élément en position 3
milist[~3]
renvoie toute la liste à l'exception de 3
Pour un liste Vous pourriez utiliser un compilateur de listes. Par exemple, pour faire b
une copie de a
sans le troisième élément :
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]
Ceci est très général, et peut être utilisé avec tous les itérables, y compris les tableaux numpy. Si vous remplacez []
con ()
, b
sera un itérateur au lieu d'une liste.
Vous pouvez aussi le faire sur place avec 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]
En numpy vous pourriez le faire avec une indexation booléenne :
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])
qui sera, en général, beaucoup plus rapide que la compréhension de liste mentionnée ci-dessus.
Si vous utilisez numpy, la solution la plus proche est l'utilisation d'un masque.
>>> import numpy as np
>>> arr = np.arange(1,10)
>>> mask = np.ones(arr.shape,dtype=bool)
>>> mask[5]=0
>>> arr[mask]
array([1, 2, 3, 4, 5, 7, 8, 9])
Il est possible d'obtenir quelque chose de similaire en utilisant itertools
sans numpy
>>> from itertools import compress
>>> arr = range(1,10)
>>> mask = [1]*len(arr)
>>> mask[5]=0
>>> list(compress(arr,mask))
[1, 2, 3, 4, 5, 7, 8, 9]
Utilisation np.delete
! Il ne supprime rien sur place
Dans votre exemple, "mylist[~3]" s'écrirait ainsi : mylist.delete(3)
Un exemple plus complexe :
import numpy as np
a = np.array([[1,4],[5,7],[3,1]])
# a: array([[1, 4],
# [5, 7],
# [3, 1]])
ind = np.array([0,1])
# ind: array([0, 1])
# a[ind]: array([[1, 4],
# [5, 7]])
all_except_index = np.delete(a, ind, axis=0)
# all_except_index: array([[3, 1]])
# a: (still the same): array([[1, 4],
# [5, 7],
# [3, 1]])
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.