Esto es principalmente un problema de lógica. Estoy tratando de reemplazar un carácter en una cadena sin usar la función de reemplazar. Estoy tratando de cambiar primero en una lista, cambiar los elementos, a continuación, gire de nuevo a la cuerda. Mi attept:

def changeCar(ch,ca1,ca2):

    a=list(ch)
    for x in a:
        if x==ca1:
             x==ca2
    return a

Sin embargo, esto no funciona. Además, no estoy seguro de cómo transformarla en una cadena. Ayuda por favor?

  • Cómo no funciona? ¿Qué se puede esperar y lo que realmente ocurre?
InformationsquelleAutor L.R. | 2014-12-13

5 Comentarios

  1. 1

    No es necesario definir una cadena como una lista en python.

    string = 'The quick brown fox jusmps over the lazy dog'
    # Define your variables
    result = ''
    for i in string:
            if i == 'o':
                    i = '0'
            result += i
    print result

    Si usted DEBE, sin embargo, el uso de una lista:

    string = list('The quick brown fox jusmps over the lazy dog')
    result = []
    for i in string:
            if i == 'o':
                    i = '0'
            result.append(i)
    print ''.join(result)
    • La lista de enfoque es preferible a la concatenación de cadenas de caracteres en un bucle (consulte here).
    • Gracias! Yo en realidad no tiene que usar listas, simplemente pensé que no sería sensato. Pero sí, dejando una cadena es más limpio. 🙂
  2. 1

    Usted está en el camino correcto. Dado que Python cadenas son inmutables, que no son capaces de cambiar los personajes en el lugar, por lo que la estrategia de desdoblamiento en una lista de caracteres, la modificación de los elementos dentro de la lista y, a continuación, volver a unirse es correcta. La solución no está funcionando porque x no es una referencia (o puntero) a los elementos dentro de la lista, pero una copia de ellos. Por lo tanto, x = c2 (y no x == c2, como su ejemplo se muestra) sólo modifica la copia. Tendrás que acceder a la lista de índice, así:

    for ind in range(len(a)):
        if a[ind] == ca1:
             a[ind] = ca2
    
    return "".join(a)

    También puede utilizar una lista de comprensión para la máxima brevedad, a pesar de que podría ser un poco ilegible:

    return "".join([(char if char != ca1 else ca2) for char in ch])
  3. 1

    No cambiar la cadena en una lista. Eso es innecesario. En su lugar, definir una cadena vacía en la definición de la función y, a continuación, adjuntar en consecuencia y, al final, se devuelve el valor de esa variable:

    def changeCar(ch,ca1,ca2):
        b = ''
        for x in ch:
            if x!= ca1:
                b+= x
            else:
                b+=ca2
        return b

    Ahora que se obtiene:

    >>> changeCar("abc","b","c")
    'acc'
    >>> 
  4. 0

    De sencillas manipulaciones como esta se puede utilizar la lista de comprensión.
    Pruebe algo como esto:

    In [1]: text = "Hello, World!"
    In [2]: ''.join([ch if ch != 'o' else 'a' for ch in text])
    Out[2]: 'Hella, Warld!'

    Esta lista comprensión reemplaza el carácter ‘o’ con ‘un’

Dejar respuesta

Please enter your comment!
Please enter your name here