elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  (python) como ordenar matriz?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (python) como ordenar matriz?  (Leído 8,090 veces)
horacio_b92

Desconectado Desconectado

Mensajes: 15


Ver Perfil
(python) como ordenar matriz?
« en: 12 Julio 2016, 13:40 pm »

Buenas gente del foro, alguno me da una ayuda con esto tengo una matriz cargada con cada fila con un registro la primer columna cod_banco y la segunda columna la descripción. Quiero ordenarla alfabéticamente por descripción?

Cod BancoDescripción
1Macro
2Santander Rio


En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.287

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: (python) como ordenar matriz?
« Respuesta #1 en: 12 Julio 2016, 15:31 pm »

bueno, faltarian varias cosas:
1)como definiste la matriz
2)un poco de esmero y mostrar algún intento

ahora bien, te doy un ejemplo de como se podría hacer

Código
  1. #-*- coding:utf -8 -*-
  2. from operator import itemgetter
  3. a=[[1,"Santander"],[2,"Cordoba"],[3,"Macro"]]
  4. bco_x_des=sorted(a, key=itemgetter(1))
  5. print(bco_x_des)
  6.  
eso es la idea y suponiendo la definición de la matriz.
Saludos y ponele media pila.


En línea

horacio_b92

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: (python) como ordenar matriz?
« Respuesta #2 en: 14 Julio 2016, 21:55 pm »

bueno, faltarian varias cosas:
1)como definiste la matriz
2)un poco de esmero y mostrar algún intento

ahora bien, te doy un ejemplo de como se podría hacer

Código
  1. #-*- coding:utf -8 -*-
  2. from operator import itemgetter
  3. a=[[1,"Santander"],[2,"Cordoba"],[3,"Macro"]]
  4. bco_x_des=sorted(a, key=itemgetter(1))
  5. print(bco_x_des)
  6.  
eso es la idea y suponiendo la definición de la matriz.
Saludos y ponele media pila.

si tenes razón, gracias por la versión que mostras es mas eficiente pero tengo que implementar el bubble sort asi lo hice:
Código:
# coding: utf-8

def contar_lineas(filename):
    _file = open(filename, 'r')
    count = 0
    for linea in _file:
        count += 1
    _file.close()
    return count

def leer_lineas(filename):
    _file = open(filename, 'r')
    data = _file.read().split('\n')
    _file.close()
    return data

def leer_datos(filename):
    '''Retorna la matriz cargada con los
    datos leidos desde el archivo pasado por parametro'''
    filas = contar_lineas(filename)
    columnas = 2
    matriz = crear_matriz(filas, columnas)
    fila = 0 # fila
    for columna in leer_lineas(filename):
        if columna:
            valores = columna.split(',')
            cod_banco = valores[0]
            desc = valores[1]
            matriz[fila][0] = cod_banco
            matriz[fila][1] = desc
            fila += 1
    return matriz

def crear_matriz(filas, columnas):
    matriz = []
    for i in range(filas):
        matriz.append([0] * columnas)
    return matriz

def informe(matriz):
    print "Codigo Banco\tDescripcion"
    for f in range(len(matriz)):
        print "{}\t\t{}".format(matriz[f][0], matriz[f][1])



def ordenamiento(matriz):
    '''Retorna la matriz ordenada por el metodo
    de la burbuja'''
    for i in range(1, len(matriz)):
        for j in range(len(matriz) - i):
            if matriz[j][1] > matriz[j+1][1]:
                temp = matriz[j][0], matriz[j][1]
                matriz[j][0], matriz[j][1] = matriz[j+1][0], matriz[j+1][1]
                matriz[j+1][0], matriz[j+1][1] = temp
    return matriz


def main():
    # lectura del archivo y carga en una matriz
    bancos = leer_datos('bancos.txt')
    bancos = ordenamiento(bancos)
    informe(bancos)


if __name__ == '__main__':
    main()



En línea

jairoes

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: (python) como ordenar matriz?
« Respuesta #3 en: 6 Enero 2017, 13:58 pm »

Hola, soy nuevo con Python. He empezado a ver unos videos tutoriales pero estoy muy verde y tengo que intentar solucionar un problema.
De momento tengo un script que extrae una serie de lineas de un fichero y las pone en otro. Ahora quiero ordenar las lineas en función de los valores de una de las columnas. En total son 596 lineas y ocho columnas separadas por espacios.
Por lo que he visto en este foro hay que crear una matriz y luego ordenarla pero no tengo muy claro como hacerlo. Alguien me podría ayudar por favor
Gracias a todos!
En línea

Yidu

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: (python) como ordenar matriz?
« Respuesta #4 en: 6 Enero 2017, 16:36 pm »

Tampoco es mala cosa crear o definir una matriz sin utilizar una funcion. Osea, usando las listas por comprension (en el ejemplo 5 filas por 3 columnas):

Código
  1. matriz = [[0] * 3 for i in range(5)]

Salida:

Código
  1. matriz
  2. [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

O tambien:

Código
  1. filas = 5
  2. columnas = 3
  3. matriz = [[0] * columnas for i in range(filas)]

En línea

jairoes

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: (python) como ordenar matriz?
« Respuesta #5 en: 7 Enero 2017, 21:19 pm »

Hola, gracias por tu respuesta. Mi problema es intentar asignar o leer la matriz asignando los valores de mis lineas a las distintas posiciones de la matriz. He intentado utilizar la estructura de este foro:

def leer_lineas():
   _file = open('salida_puntos.txt', 'r')
   data = _file.read().split('\n')
   _file.close()
   return data

columnas = 8

def crear_matriz(numLineas, columnas):
   matriz = []
   for i in range(numLineas):
      matriz.append([0] * columnas)

matriz = crear_matriz(numLineas, columnas)
fila = 0
for columna in leer_lineas():
    if columna:
        valores = columna.split(' ')
        des1 = valores[0]
        coord_x = valores[1]
        coord_y = valores[2]
        coord_z = valores[3]
        des2 = valores[4]
        des3 = valores[5]
        des4 = valores[6]
        des5 = valores[7]
        matriz[fila][0] = des1
        matriz[fila][1] = coord_x
        matriz[fila][2] = coord_y
        matriz[fila][3] = coord_z
        matriz[fila][4] = des2
        matriz[fila][5] = des3
        matriz[fila][6] = des4
        matriz[fila][7] = des5
        fila += 1

Pero me da el siguiente error:

    matriz[fila][0] = des1

TypeError: 'NoneType' object is not subscriptable

Cada una de las lineas de mi fihero de texto tiene información como la siguiente:

'prescribed_point 1069.2370605469 -980.5009765625 7836.5126953125 family POINTS name TMP_TOPO_PART_NAME.2534'

Lo que yo quiero poder ordenar todas las filas en función de la coordenada de la cuarta columna que es la coordenada z de una serie de puntos.

Gracias de nuevo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO][PYTHON] Como ordenar(sort) un diccionario?
Scripting
Jirp96 5 15,337 Último mensaje 10 Junio 2016, 17:35 pm
por cerototal
Ordenar matriz alfabeticamente
Programación C/C++
programacion_c 7 9,054 Último mensaje 25 Abril 2012, 00:19 am
por david_BS
ordenar matriz
Java
~H~ 1 1,161 Último mensaje 4 Noviembre 2013, 15:52 pm
por egyware
[Ayuda] Como puedo ordenar los elementos gráficos por coordenadas en Python
Scripting
Proxmond 3 2,827 Último mensaje 16 Junio 2014, 16:48 pm
por daryo
Ordenar una matriz en C?
Programación C/C++
palacio29 0 6,675 Último mensaje 6 Septiembre 2016, 01:06 am
por palacio29
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines