Existe uma maneira simples de indexar todos os elementos de uma lista (ou array, ou qualquer outra coisa), exceto para um índice específico? Por exemplo,
mylist[3]
irá devolver o item na posição 3milist[~3]
retornará a lista inteira, exceto para 3
Para obter uma lista , você pode usar um comp de lista. Por exemplo, para fazer b
uma cópia a
sem o terceiro 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]
Isso é muito geral e pode ser usado com todos os iteráveis, incluindo matrizes numpy. Se você substituir []
por ()
, b
será um iterador em vez de uma lista.
Ou você pode fazer isso no local com 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]
Em numpy, você poderia fazer isso com uma indexação 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 será, em geral, muito mais rápido do que a compreensão da lista listada acima.
>>> 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]
>>>
Veja também
numpy.concatenate
.A maneira mais simples que encontrei foi:
isso produzirá seu
mylist
sem o elemento no índicex
.fonte
Se você estiver usando numpy, o mais próximo que posso pensar é em usar uma máscara
Algo semelhante pode ser alcançado usando
itertools
semnumpy
fonte
np.arange(len(arr)) != 3
a máscara, porque então ela pode ser embutida, por exemplo,arr[~(np.arange(len(arr)) == 3)]
ou qualquer outra coisa.Use
np.delete
! Na verdade, não exclui nada no localExemplo:
fonte
Vou fornecer uma maneira funcional (imutável) de fazer isso.
A maneira padrão e fácil de fazer isso é usar o fatiamento:
Resultado:
Use a compreensão da lista:
Resultado:
Use a função de filtro:
Resultado:
Usando máscara. O mascaramento é fornecido pela função itertools.compress na biblioteca padrão:
Resultado:
Use a função itertools.filterfalse da biblioteca padrão do Python
Resultado:
fonte
Se você não conhece o índice de antemão, aqui está uma função que irá funcionar
fonte
Observe que se a variável for uma lista de listas, algumas abordagens falharão. Por exemplo:
Para o caso geral, use
fonte
Se você quiser cortar o último ou o primeiro, faça o seguinte:
Se você alterar 1 para 2, os 2 primeiros caracteres serão removidos, não o segundo. Espero que isso ainda ajude!
fonte