[SOLUCIONADO] [Python] Listar número de repeticiones de cada caracter

Iniciado por sancakoky, Agosto 27, 2015, 01:13:02 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 27, 2015, 01:13:02 PM Ultima modificación: Diciembre 10, 2015, 07:13:46 PM por WhiZ
Hola buenas, pues soy nuevo en python y estoy intentando recoger una lista con un for pero a la hora de imprimirla que sea fuera del for porque en realidad no voy a imprimir la lista, sino que voy a utilizar la lista rellena fuera del for.
¿Porque no me funciona esto? El resultado que quiero es lista ['2a', '1A', '3b',3b'', '1B', '1c', '1C', '2a', '3b']

Código: python
cadena="aAbbBcCab"
n=0
for caracter in cadena:
    a=cadena.count(caracter)
    y=str(a)
    z=len(cadena)
    lista=range(z)
    lista[n]=y+caracter
    n=n+1
print lista[:]


Agosto 27, 2015, 03:46:48 PM #1 Ultima modificación: Agosto 27, 2015, 04:24:49 PM por WhiZ
Hola amigo! Espero que te sirva!

Código: python
cadena = "aAbbBcCab"
lista = []

for caracter in cadena:
    cantidad = str(cadena.count(caracter))
    lista.append(cantidad + caracter)

print lista


El problema es que la lista se volvía a crear con cada bucle. Tenés que crearla afuera (lista = []) y dentro del bucle le agregas los valores que quieras (lista.append()).

Saludos!
WhiZ


Como bien dijo WhiZ:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
El problema es que la lista se volvía a crear con cada bucle. Tenés que crearla afuera (lista = []) y dentro del bucle le agregas los valores que quieras (lista.append()).
En tu código bastaría con incluir un array en el que guardar el resultado, tal que así:
Código: python
cadena="aAbbBcCab"
n=0
resultado = []
for caracter in cadena:
    a=cadena.count(caracter)
    y=str(a)
    z=len(cadena)
    lista=range(z)
    lista[n]=y+caracter
    resultado.append(lista[n])
    n=n+1
print resultado[:]

CitarZ:\amazingdir>python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
['2a', '1A', '3b', '3b', '1B', '1c', '1C', '2a', '3b']
Podría vivir perfectamente con una mancha de pis en la alfombra, pero qué va, tío: Más complicaciones.

Fenomenos, muchisimas gracias chicos

Esto de contar los caracteres en una lista me suena. ¿Es de algún wargame?
Podría vivir perfectamente con una mancha de pis en la alfombra, pero qué va, tío: Más complicaciones.

Agosto 28, 2015, 07:28:22 AM #5 Ultima modificación: Agosto 28, 2015, 08:29:54 AM por WhiZ
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
En tu código bastaría con incluir un array en el que guardar el resultado, tal que así:
Código: python
cadena="aAbbBcCab"
n=0
resultado = []
for caracter in cadena:
    a=cadena.count(caracter)
    y=str(a)
    z=len(cadena)
    lista=range(z)
    lista[n]=y+caracter
    resultado.append(lista[n])
    n=n+1
print resultado[:]

CitarZ:\amazingdir>python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
['2a', '1A', '3b', '3b', '1B', '1c', '1C', '2a', '3b']

Como bien dice @rand0m, bastaría con añadir un array para que el código que presentaste sea funcional. Sin embargo, en cada bucle se está creando una nueva lista con tantos lugares como caracteres tenga la cadena ('lista = range(z)'), de los cuales sólo se usa un lugar para almacenar temporalmente una cadena que luego, en el mismo bucle, será almacenada dentro de la lista creada fuera del bloque for ('resultado'). Con esto, quiero decir que resulta innecesaria la creación y utilizacón de la lista temporal ('lista') y, por ende, del contador ('n').

Conclusión: siempre que escribas cualquier código, primero pensá bien qué es lo que querés hacer y cómo vas a lograrlo. Planificá bien todo y, recién ahí sentate a codear. Python es simple. No te compliques. Siempre que tengas un código medio redundante, analizalo bien porque seguro que hay cosas prescindibles.

Recomendación: compará tu código con el que yo presenté en mi respuesta anterior y fijate qué diferencias existen entre ellos. ¿Por qué mi código es más corto, limpio y efectivo (más simple)? Básicamente por dos razones: la lógica implementada y la nomenclatura empleada al nombrar los distintos elementos.

Espero haberte ayudado!

Saludos!
WhiZ


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Conclusión: siempre que escribas cualquier código, primero pensá bien qué es lo que querés hacer y cómo vas a lograrlo. Planificá bien todo y, recién ahí sentate a codear. Python es simple. No te compliques. Siempre que tengas un código medio redundante, analizalo bien porque seguro que hay cosas prescindibles.
Además de eso, añadir también que a la hora de hacer un simple snippet como éste no se nota demasiado, pero cuando estamos haciendo algo más largo el tamaño del script se nos puede desmadrar por estas cosas.

Aunque eso ya va con la práctica, sobre todo.
Podría vivir perfectamente con una mancha de pis en la alfombra, pero qué va, tío: Más complicaciones.