una tutorial transpuesta multiplicar multiplicacion matriz matrices libreria inversa español ejemplos como calcular python indexing sorted

python - transpuesta - numpy tutorial español pdf



Cómo obtener índices de una matriz ordenada en Python (6)

Algo como el siguiente:

>>> myList = [1, 2, 3, 100, 5] >>> [i[0] for i in sorted(enumerate(myList), key=lambda x:x[1])] [0, 1, 2, 4, 3]

enumerate(myList) le da una lista que contiene tuplas de (índice, valor):

[(0, 1), (1, 2), (2, 3), (3, 100), (4, 5)]

Puede ordenar la lista pasándola para sorted y especificar una función para extraer la clave de clasificación (el segundo elemento de cada tupla; para eso está el lambda . Finalmente, el índice original de cada elemento ordenado se extrae utilizando [i[0] for i in ...] list comprehension.

Tengo una lista numérica:

myList = [1, 2, 3, 100, 5]

Ahora si ordeno esta lista para obtener [1, 2, 3, 5, 100] . Lo que quiero es los índices de los elementos de la lista original en el orden ordenado, es decir [0, 1, 2, 4, 3] --- ala función de clasificación de MATLAB que devuelve valores e índices.


Las respuestas con enumerate son agradables, pero personalmente no me gusta el lambda utilizado para ordenar por el valor. Lo siguiente simplemente invierte el índice y el valor, y ordena eso. Por lo tanto, primero se ordenará por valor, luego por índice.

sorted((e,i) for i,e in enumerate(myList))


Respuesta actualizada con enumerate y itemgetter :

sorted(enumerate(a), key=lambda x: x[1]) # [(0, 1), (1, 2), (2, 3), (4, 5), (3, 100)]

Comprima las listas juntas: el primer elemento de la tupla será el índice, el segundo es el valor (luego, ordénelo usando el segundo valor de la tupla x[1] , x es la tupla)

O usando itemgetter del itemgetter de operator :

from operator import itemgetter sorted(enumerate(a), key=itemgetter(1))


Si no quieres usar numpy,

sorted(range(len(seq)), key=seq.__getitem__)

es el más rápido, como se demuestra here .



In [15]: myList = [1, 2, 3, 100, 5] In [16]: sorted(range(len(myList)),key=lambda x:myList[x]) Out[16]: [0, 1, 2, 4, 3]

También:

sorted(range(len(myList)),key=myList.__getitem__)