Foros del Web » Programando para Internet » Python »

Como contar número de apariciones

Estas en el tema de Como contar número de apariciones en el foro de Python en Foros del Web. Buenas, No consigo contar el numero de repeticiones de cada número. El programa lee de un TXT lineas, con 6 números distintos en cada una ...
  #1 (permalink)  
Antiguo 23/05/2009, 14:02
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Como contar número de apariciones

Buenas,

No consigo contar el numero de repeticiones de cada número.

El programa lee de un TXT lineas, con 6 números distintos en cada una de ellas.
1 8 19 20 35 47
9 13 20 28 33 46

El programa debería ser capaz de sacar un resumen tipo
numero : veces que ha salido
Ejemplo:
1:30
2:16
3:28
etc..

En C, por ejemplo sé crear un array a[ ] y dentro de este array voy sumándole las posiciones a[b]= a[b] + 1, es decir,

bucle que lee linea a linea
valor1 es el primer valor de la linea
a[valor1]=a[valor1]+1

bucle que recorre todo el array imprimiendo el indice y su contenido

Pero todo esto en python no se me ocurre como hacerlo! Cómo lo haríais??

Muchas gracias!
  #2 (permalink)  
Antiguo 23/05/2009, 17:20
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Como contar número de apariciones

Código python:
Ver original
  1. archivo = "prueba.txt"
  2. try:
  3.     f = open(archivo,"r")
  4. except IOError:
  5.     f.close()
  6.     exit()
  7.  
  8. contenido = f.readlines()
  9. f.close()
  10.  
  11. lista = []
  12. lista_final = []
  13.  
  14. for numero in contenido:
  15.    lista += numero.split()
  16. lista.sort()
  17. set_lista = set(lista)
  18. set_lista = list(set_lista)
  19. set_lista.sort()
  20. print "Valor:Ocurrencias"
  21. for numero in set_lista:
  22.     lista_final.append((lista.count(numero), numero))
  23.  
  24. lista_final.sort(reverse=True)
  25. print lista_final

Este es un pequeño código que hice rápido :p
Funciona en general para caracteres también, no tiene limite de lineas, ni de largo ni de ancho. Solo tienen que ir separa por espacios o tabs.

Última edición por razpeitia; 23/05/2009 a las 17:35
  #3 (permalink)  
Antiguo 23/05/2009, 19:27
 
Fecha de Ingreso: julio-2008
Mensajes: 15
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Como contar número de apariciones

import string
con=0
numrep=None

archivo=open('numeros.txt','r')
numeros=archivo.readlines()
archivo.close()

separando=string.split(string.join(numeros))

print separando

for i in separando:
c=separando.count(i)
if numrep==i:
continue

if c>1:
print 'numero', i,':',c
numrep=i


elif numrep!=i:
print 'numero', i,':',c

con+=1

Espero te sirva ,ya diras algo ;)
  #4 (permalink)  
Antiguo 23/05/2009, 20:05
 
Fecha de Ingreso: julio-2008
Mensajes: 15
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Como contar número de apariciones

me precipite el programa no funciona bien
  #5 (permalink)  
Antiguo 24/05/2009, 03:38
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Respuesta: Como contar número de apariciones

Cita:
Iniciado por razpeitia Ver Mensaje
Código python:
Ver original
  1. archivo = "prueba.txt"
  2. try:
  3.     f = open(archivo,"r")
  4. except IOError:
  5.     f.close()
  6.     exit()
  7.  
  8. contenido = f.readlines()
  9. f.close()
  10.  
  11. lista = []
  12. lista_final = []
  13.  
  14. for numero in contenido:
  15.    lista += numero.split()
  16. lista.sort()
  17. set_lista = set(lista)
  18. set_lista = list(set_lista)
  19. set_lista.sort()
  20. print "Valor:Ocurrencias"
  21. for numero in set_lista:
  22.     lista_final.append((lista.count(numero), numero))
  23.  
  24. lista_final.sort(reverse=True)
  25. print lista_final

Este es un pequeño código que hice rápido :p
Funciona en general para caracteres también, no tiene limite de lineas, ni de largo ni de ancho. Solo tienen que ir separa por espacios o tabs.
Gracias razpeitia

Para que apareciese primero el numero y luego las veces que ha salido he tenido que cambiar el orden
lista_final.append((lista.count(numero), numero)) por lista_final.append((numero,lista.count(numero)))

Consiendo una salida de este tipo
Código:
Valor:Ocurrencias
('9', 6)
('8', 7)
('7', 5)
('6', 8)
('5', 7)
('49', 5)
('48', 5)
('47', 6)
('46', 9)
('45', 8)
('44', 7)
('43', 9)
('42', 3)
('41', 7)
('40', 14)
('4', 6)
('39', 10)
('38', 15)
('37', 13)
('36', 7)
('35', 5)
('34', 11)
('33', 10)
('32', 6)
('31', 7)
('30', 9)
('3', 5)
('29', 9)
('28', 10)
('27', 10)
('26', 8)
('25', 12)
('24', 6)
('23', 16)
('22', 17)
('21', 3)
('20', 6)
('2', 6)
('19', 10)
('18', 6)
('17', 9)
('16', 9)
('15', 7)
('14', 9)
('13', 8)
('12', 11)
('11', 11)
('10', 5)
('1', 4)
Me gustaría poder ordenar o bien por el primer valor, o bien por las veces que más a salido. Sabéis como debo hacerlo?

Porque he probado lista_final.sort() pero no me los ordena así.
  #6 (permalink)  
Antiguo 24/05/2009, 09:37
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Como contar número de apariciones

Código python:
Ver original
  1. archivo = "prueba.txt"
  2. try:
  3.     f = open(archivo,"r")
  4. except IOError:
  5.     f.close()
  6.     exit()
  7.  
  8. contenido = f.readlines()
  9. f.close()
  10.  
  11. lista = []
  12. lista_final = []
  13.  
  14. for numero in contenido:
  15.    lista += numero.split()
  16. lista.sort()
  17. set_lista = set(lista)
  18. set_lista = list(set_lista)
  19. set_lista.sort()
  20. print "Valor:Ocurrencias"
  21. for numero in set_lista:
  22.     lista_final.append((lista.count(numero), numero))
  23.  
  24. lista_final.sort(reverse=True, key=lambda x:(int(x[1]), x[0]))
  25.  
  26. for tupla in lista_final:
  27.     print "%s %d"%(tupla[1], tupla[0])
Ahora solo funciona para enteros y flotantes xD, lanzara una excepcion si no lo es :-\
En
Código python:
Ver original
  1. lista_final.sort(reverse=True, key=lambda x:(int(x[1]), x[0]))
Intercambia el orden si los quieres ordenado por valores o por ocurrencia

Tenia que hacer un cast a int en la función, para que lo ordenara correctamente.
max('8', '47') me regresa 8, por que en un string compara carácter por carácter.
  #7 (permalink)  
Antiguo 24/05/2009, 14:07
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Respuesta: Como contar número de apariciones

Cita:
Iniciado por razpeitia Ver Mensaje
Código python:
Ver original
  1. archivo = "prueba.txt"
  2. try:
  3.     f = open(archivo,"r")
  4. except IOError:
  5.     f.close()
  6.     exit()
  7.  
  8. contenido = f.readlines()
  9. f.close()
  10.  
  11. lista = []
  12. lista_final = []
  13.  
  14. for numero in contenido:
  15.    lista += numero.split()
  16. lista.sort()
  17. set_lista = set(lista)
  18. set_lista = list(set_lista)
  19. set_lista.sort()
  20. print "Valor:Ocurrencias"
  21. for numero in set_lista:
  22.     lista_final.append((lista.count(numero), numero))
  23.  
  24. lista_final.sort(reverse=True, key=lambda x:(int(x[1]), x[0]))
  25.  
  26. for tupla in lista_final:
  27.     print "%s %d"%(tupla[1], tupla[0])
Ahora solo funciona para enteros y flotantes xD, lanzara una excepcion si no lo es :-\
En
Código python:
Ver original
  1. lista_final.sort(reverse=True, key=lambda x:(int(x[1]), x[0]))
Intercambia el orden si los quieres ordenado por valores o por ocurrencia

Tenia que hacer un cast a int en la función, para que lo ordenara correctamente.
max('8', '47') me regresa 8, por que en un string compara carácter por carácter.
Muchisimas gracias razpeitia !!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:03.