Em Python, como faço para mover um item para um índice definido em uma lista?
104
Use o insert
método de uma lista:
l = list(...)
l.insert(index, item)
Como alternativa, você pode usar uma notação de fatia:
l[index:index] = [item]
Se você quiser mover um item que já está na lista para a posição especificada, deverá excluí-lo e inseri-lo na nova posição:
l.insert(newindex, l.pop(oldindex))
last index + 1
sem erros. O elemento é apenas anexado à lista nesse caso.a.insert(99999, 1)
In [14]: a
Out[14]: [...., 1]
Uma solução um pouco mais curta, que apenas move o item até o fim, não a lugar nenhum, é esta:
Por exemplo:
fonte
l.append(l.pop(0))
. É apenas um pouco mais longo, mas é muito mais legível.Se você não sabe a posição do item, pode precisar encontrar o índice primeiro:
então mova-o:
ou IMHO de uma forma mais limpa:
fonte
pass
declaração ... nunca esconda exceções - o padrão em um exemplo como este deve ser fornecer uma declaração de erro mais limpa ou uma declaração de impressão ...raise ValueError(f'Unable to move item to {new_index}')
ouprint(f'Moving item to {new_index} failed. List remains unchanged.')
. Talvezpass
ficasse ok se em uma função chamadatry_to_move_item
ou algo assim se entendesse que a operação pode falhar silenciosamente.Uma solução muito simples, mas você tem que saber o índice da posição original e o índice da nova posição:
fonte
Fiz o perfil de alguns métodos para mover um item da mesma lista com o timeit. Aqui estão aqueles a serem usados se j> i:
e aqui aqueles a serem usados se j <= i:
Não é uma grande diferença se você usá-lo apenas algumas vezes, mas se você fizer coisas pesadas como classificação manual, é importante escolher o mais rápido. Caso contrário, recomendo apenas pegar aquele que você achar mais legível.
fonte