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 |
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.
Cita de: tincopasan 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
#-*- 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()
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!
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)]
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!