Sort a second column matrix

Asked

Viewed 2,951 times

1

How to order the following matrix according to the x-coordinate column? I want you not only to order the coordinates, but to change the lines so that the city coordinates are correct.

What I have so far works for the first 3 cities but the last is simply a copy of a previous line.

matriz_ficheiro=[['Nome' 'Coordenada X' 'Coordenada Y' 'Peso']
 ['Lisboa' '36.752' '204.319' '3']
 ['Copenhaga' '1971.323' '2086.417' '5']
 ['Berlin' '2046.659' '1735.743' '4']
 ['Madrid' '520.862' '392.972' '2']]

lista_x=[]
for i in range(1,matriz_ficheiro[:,0].size):
    lista_x.append(float(matriz_ficheiro[i][1]))    
matriz_ordenada_x=matriz_ficheiro


 for i in range (1,matriz_ficheiro[:,0].size):
    minimo_x=min(lista_x)
    for j in range (1,matriz_ficheiro[:,0].size):
        if minimo_x==eval(matriz_ficheiro[j][1]):

            matriz_ordenada_x[i][0]=matriz_ficheiro[j][0]
            matriz_ordenada_x[i][1]=minimo_x
            matriz_ordenada_x[i][2]=matriz_ficheiro[j][2]
            matriz_ordenada_x[i][3]=matriz_ficheiro[j][3]
    lista_x.remove(minimo_x)    

The result is as follows:

--------------------------------------------------------------------------------
|     Nome           |     Coordenada X   |     Coordenada Y   |     Peso      |
--------------------------------------------------------------------------------
|     Lisboa         |     36.752         |     204.319        |     3         |
--------------------------------------------------------------------------------
|     Madrid         |     520.862        |     392.972        |     2         |
--------------------------------------------------------------------------------
|     Berlin         |     2046.659       |     1735.743       |     4         |
--------------------------------------------------------------------------------
|     Berlin         |     2046.659       |     1735.743       |     4         |
--------------------------------------------------------------------------------

1 answer

1

You can use the itemgetter module operator and greatly simplify your code:

from operator import itemgetter

matrix_ficheiro = [['Nome', 'Coordenada X', 'Coordenada Y', 'Peso'],
 ['Lisboa', 36.752, 204.319, 3], 
 ['Copenhaga', 1971.323, 2086.417, 5], 
 ['Berlin', 2046.659, 1735.743, 4], 
 ['Madrid', 520.862, 392.972, 2]]

# Recebendo a primeira linha da matriz (Nome, Coordenada X, Coordenada Y, Peso)
# Salvando em uma nova matriz que estará ordenada
matrix_ordenada = matrix_ficheiro[0]

# Ordenando pela segunda coluna da matrix (desconsiderando a primeira linha)
sub_matrix_ordenada = sorted(matrix_ficheiro[1:], key=itemgetter(1))

# Percorrendo a sub matriz e adicionando cada elemento na nova matriz ordenada
for elem in sub_matrix_ordenada:
    matrix_ordenada.append(elem)

# Opcional
# Matriz original recebe a nova matriz ordenada
# É opcional, pois você pode simplesmente usar a matriz ordenada
matrix_ficheiro = matrix_ordenada

Browser other questions tagged

You are not signed in. Login or sign up in order to post.