Se eu tiver uma lista, [a,b,c,d,e]
como posso reordenar os itens de maneira arbitrária, como [d,c,a,b,e]
?
Edit: Eu não quero embaralhá-los. Quero reordená-los de uma maneira predefinida. (por exemplo, eu sei que o terceiro elemento da lista antiga deve se tornar o primeiro elemento da nova lista)
Respostas:
Você pode fazer assim
fonte
mylist[:] = [mylist[i] for i in myorder]
fonte
fonte
A ordem final é definida por uma lista de índices?
editar: meh. AJ foi mais rápido ... Como posso reordenar uma lista em python?
fonte
fonte
Você pode fornecer sua própria função de classificação para
list.sort()
:fonte
Se você usar o numpy, há uma maneira legal de fazer isso:
Este código retorna:
fonte
Se você não se preocupa tanto com a eficiência, pode contar com a indexação de array do numpy para torná-lo elegante:
fonte
Pelo que entendi da sua pergunta, parece que você deseja aplicar uma permutação especificada em a
list
. Isso é feito especificando outrolist
(vamos chamá-lop
) que contém os índices dos elementos do originallist
que deveriam aparecer no permutadolist
. Você então usap
para fazer um novolist
simplesmente substituindo o elemento em cada posição por aquele cujo índice está nessa posição emp
.Isto imprime
['d', 'c', 'a', 'b', 'e']
.Na verdade, isso cria um novo
list
, mas pode ser modificado trivialmente para permutar o original "no lugar".fonte
Mais uma coisa que pode ser considerada é a outra interpretação apontada por darkless
Código em Python 2.7
Principalmente:
Reordenar por índice
Isso imprimirá ['c', 'd', 'b', 'a', 'e']
fonte
fonte
Foi o que usei quando me deparei com esse problema.
EX: para as letras minúsculas
Ele simplesmente muda a lista para um índice especificado
fonte