Para algún contexto, tengo una larga cadena de letras con los enteros correspondientes (de los cuales he predefinido como variable, es decir, X = 4), y quiero entender cómo tomar esta cadena y convertirla en números individualmente .

Tengo un par de pistas sobre cómo abordaría esto, pero cada método que he probado no funcionó.

Tengo una cadena larga compuesta de 5 caracteres diferentes repetidos al azar. ¿Cómo examinaría cada uno de estos caracteres individualmente y luego crearía una cadena correspondiente que contenga los números correspondientes? He pensado en hacer esto como una lista, pero no sé cómo insertaría automáticamente cada carácter individual como elemento en la lista, ya que hay cientos de estos caracteres.

Solo para repetir, las letras deben revisarse independientemente y luego se les debe dar su número (que está predefinido).

Ejemplos de entradas + salidas:

Entrada: ASDF

Y suponiendo

A = 1
S = 2
D = 3
F = 4

Salida: 1234

Para más contexto, me gustaría sumar todos estos números para un total.

Aquí está mi código hasta ahora:

x = 10  # establishing roman numerals to integer conversion
l = 50
c = 100
d = 500
m = 1000

code = "LMXCDLMXDCLMXCDLMXDCLMXDCDXC"

code = code.replace(" ", "")  # get rid of spaces
'''
code = (" ".join(code))  # adding spaces between each character
'''
code = list(code)  # inserting each character as an individual in an array

print(code)
2
deckador 30 oct. 2017 a las 22:13

4 respuestas

La mejor respuesta

Si ha configurado un dictionary para lo que cada character se traduce, es decir:

d = {'a': 5, 'b': 9, 'c': 4, 'd': 2} #...

Luego puedes tomar una string como:

s = "cabab"

Y use un list-comprehension para obtener el integer correspondiente para cada character en el string del dictionary y luego join juntos para formar uno completar string de numbers:

''.join(str(d[i]) for i in s)

Que para nuestro pequeño ejemplo dará:

"45959"

Creo que esto es lo que querías!


Actualizar

Después de ver su edición más reciente, veo que desea sum, que se puede hacer de la misma manera:

sum(d[i] for i in s)

Que da 32 para mi ejemplo (4 + 5 + 9 + 5 + 9).

2
Joe Iddon 30 oct. 2017 a las 19:26

Para la próxima vez, intente incluir su código, o al menos la sección importante del mismo. Hay una página de ayuda en alguna parte.

Mi ejemplo de código es a = 1, b = 2, c = 3, y genera una cadena de números, pero solo úsalo como ejemplo y haz lo que quieras hacer.

end_string = ''
for letter in string:
    if letter=='a':
        end_string+='1'    
    elif letter=='b':
        end_string+='2'
    elif letter=='c':
        end_string+='3'

Puedes tener una int "total" en su lugar si quieres un total.

Si las letras tienen valores consecutivos (como en su caso ASDF), puede hacer esto:

first_val = 1
letters=['A','S','D','F']
result = ''
for letter in string:
   for set_letter in range(len(letters)):
        if letters[i] == letter:
            result += str(i+first_val)

Que funcionará para cualquier longitud de matriz.

0
nerryoob 30 oct. 2017 a las 19:42

Podrías hacer algo como esto.

// you could use 
map = dict(a=2, s=3, d=4, f=5)
print ''.join([str(map[k]) for k in "asdffdsa"])
-2
Rafael Quintela 30 oct. 2017 a las 19:30

Realmente no necesita manipular su entrada como una cadena per-se sino como una secuencia de caracteres. Si está buscando la suma final, el resultado debe ser una lista de enteros, que luego puede sumar, no otra cadena.

Otro punto es cómo se obtiene la asignación de entrada. El formato más conveniente es usar un diccionario para una búsqueda fácil. En lugar de hacer algo como lo has hecho ahora, haz lo siguiente:

# establishing roman numerals to integer conversion
conversion = {
    'x': 10,
    'l': 50,
    'c': 100,
    'd': 500,
    'm': 1000
}

Podría hacer algo como conversion = locals() para convertir los nombres de las variables en claves de diccionario, pero eso introduciría muchas conversiones no válidas.

Si tiene un diccionario, puede hacer una lista de números de su cadena con una comprensión de diccionario de una línea:

code = "LMXCDLMXDCLMXCDLMXDCLMXDCDXC"
numbers = [conversion[c] for c in code if c in conversion]

La parte if c in conversion omitirá automáticamente cualquier carácter no válido, como espacios en la cadena.

La suma se puede calcular utilizando la función integrada sum:

total = sum(numbers)

Si no necesita la lista intermedia numbers para nada, puede calcular la suma en un solo paso:

sum(conversion[c] for c in code if c in conversion)
0
Mad Physicist 30 oct. 2017 a las 19:49