Autor
|
Tema: (python) como ordenar matriz? (Leído 10,877 veces)
|
horacio_b92
Desconectado
Mensajes: 15
|
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 Banco | Descripción | 1 | Macro | 2 | Santander Rio |
|
|
|
En línea
|
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
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 #-*- coding:utf -8 -*- from operator import itemgetter a=[[1,"Santander"],[2,"Cordoba"],[3,"Macro"]] bco_x_des=sorted(a, key=itemgetter(1)) print(bco_x_des)
eso es la idea y suponiendo la definición de la matriz. Saludos y ponele media pila.
|
|
|
En línea
|
|
|
|
horacio_b92
Desconectado
Mensajes: 15
|
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 #-*- coding:utf -8 -*- from operator import itemgetter a=[[1,"Santander"],[2,"Cordoba"],[3,"Macro"]] bco_x_des=sorted(a, key=itemgetter(1)) print(bco_x_des)
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: # 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
Mensajes: 2
|
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
Mensajes: 133
|
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): matriz = [[0] * 3 for i in range(5)]
Salida: matriz [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
O tambien: filas = 5 columnas = 3 matriz = [[0] * columnas for i in range(filas)]
|
|
|
En línea
|
|
|
|
jairoes
Desconectado
Mensajes: 2
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[SOLUCIONADO][PYTHON] Como ordenar(sort) un diccionario?
Scripting
|
Jirp96
|
5
|
17,047
|
10 Junio 2016, 17:35 pm
por cerototal
|
|
|
Ordenar matriz alfabeticamente
Programación C/C++
|
programacion_c
|
7
|
11,122
|
25 Abril 2012, 00:19 am
por david_BS
|
|
|
ordenar matriz
Java
|
~H~
|
1
|
2,199
|
4 Noviembre 2013, 15:52 pm
por egyware
|
|
|
[Ayuda] Como puedo ordenar los elementos gráficos por coordenadas en Python
Scripting
|
Proxmond
|
3
|
4,355
|
16 Junio 2014, 16:48 pm
por daryo
|
|
|
Ordenar una matriz en C?
Programación C/C++
|
palacio29
|
0
|
9,648
|
6 Septiembre 2016, 01:06 am
por palacio29
|
|