¿Existe una forma sencilla de indexar todos los elementos de una lista (o matriz, o lo que sea) excepto un índice en particular? P.ej,
mylist[3]
devolverá el artículo en la posición 3milist[~3]
devolverá la lista completa excepto 3
Para obtener una lista , puede usar una lista comp. Por ejemplo, para hacer b
una copia a
sin el tercer elemento:
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]
Esto es muy general y se puede usar con todos los iterables, incluidas las matrices numpy. Si reemplaza []
con ()
, b
será un iterador en lugar de una lista.
O puede hacer esto en el lugar con 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 , podría hacer esto con una indexación booleana:
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])
que, en general, será mucho más rápido que la comprensión de la lista mencionada anteriormente.
>>> l = range(1,10)
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[:2]
[1, 2]
>>> l[3:]
[4, 5, 6, 7, 8, 9]
>>> l[:2] + l[3:]
[1, 2, 4, 5, 6, 7, 8, 9]
>>>
Ver también
numpy.concatenate
.La forma más sencilla que encontré fue:
que producirá su
mylist
sin el elemento en el índicex
.fuente
Si está usando numpy, lo más cercano que puedo pensar es usar una máscara
Algo similar se puede lograr usando
itertools
sinnumpy
fuente
np.arange(len(arr)) != 3
como la máscara, porque entonces puede estar en línea, por ejemplo,arr[~(np.arange(len(arr)) == 3)]
o lo que sea.np.delete
¡ Utilice ! En realidad, no elimina nada en su lugarEjemplo:
fuente
Voy a proporcionar una forma funcional (inmutable) de hacerlo.
La forma estándar y fácil de hacerlo es usar el corte:
Salida:
Utilice la comprensión de la lista:
Salida:
Utilice la función de filtro:
Salida:
Usando enmascaramiento. El enmascaramiento lo proporciona la función itertools.compress en la biblioteca estándar:
Salida:
Utilice la función itertools.filterfalse de la biblioteca estándar de Python
Salida:
fuente
Si no conoce el índice de antemano, aquí hay una función que funcionará
fuente
Tenga en cuenta que si la variable es una lista de listas, algunos enfoques fallarían. Por ejemplo:
Para el caso general, utilice
fuente
Si desea cortar el último o el primero, haga esto:
Si cambia de 1 a 2, se eliminarán los primeros 2 caracteres, no el segundo. ¡Espero que esto todavía ayude!
fuente