Sé que

"123abc" * 2

evalúa como "123abc123abc", pero hay una manera fácil de repetir cada una de las letras N veces, por ejemplo, convertir "123abc" a "112233aabbcc" o "111222333aaabbbccc"?

  • Trate de usar un bucle for y concatenar caracteres para obtener la salida deseada.
InformationsquelleAutor Jason S | 2016-07-08

9 Comentarios

  1. 19

    Lo que acerca de:

    >>> s = '123abc'
    >>> n = 3
    >>> ''.join([char*n for char in s])
    '111222333aaabbbccc'
    >>> 

    (cambiado a una lista comp de un generador de expresión como el uso de una lista comp dentro de unen es más rápido)

    • ah, me gusta el uso de comprensiones, yo estaba teniendo un cerebro calambre por alguna razón.
  2. 4

    Una alternativa itertools-problema-complicar-opción de estilo con repeat(), izip() y chain():

    >>> from itertools import repeat, izip, chain
    >>> "".join(chain(*izip(*repeat(s, 2))))
    '112233aabbcc'
    >>> "".join(chain(*izip(*repeat(s, 3))))
    '111222333aaabbbccc'

    O, «yo sé, expresiones regulares y lo voy a usar para todo»-la opción de estilo:

    >>> import re
    >>> n = 2
    >>> re.sub(".", lambda x: x.group() * n, s)  # or re.sub('(.)', r'' * n, s) - thanks Eduardo
    '112233aabbcc'

    Por supuesto, no utilizar estas soluciones en la práctica.

  3. 2

    Y desde que tengo uso de numpy para todo, aquí vamos:

    import numpy as np
    n = 4
    ''.join(np.array(list(st*n)).reshape(n, -1).T.ravel())
  4. 1

    Si quieres que se repita individuales letras se puede sustituir la carta con n letras por ejemplo,

    >>> s = 'abcde'
    >>> s.replace('b', 'b'*5, 1)
    'abbbbbcde'
  5. 1

    @Bahrom la respuesta es, probablemente, más clara que la mía, pero sólo para decir que hay muchas soluciones para este problema:

    >>> s = '123abc'
    >>> n = 3
    >>> reduce(lambda s0, c: s0 + c*n, s, "")
    '111222333aaabbbccc'

    Nota que reduce no es un built-in de python 3, y usted tiene que utilizar functools.reduce lugar.

  6. 1

    O el uso de expresiones regulares:

    >>> import re
    >>> s = '123abc'
    >>> n = 3
    >>> re.sub('(.)', r'' * n, s)
    '111222333aaabbbccc'
  7. 1

    De otra manera:

    def letter_repeater(n, string):
        word = ''
        for char in list(string):
            word += char * n
        print word
    
    letter_repeater(4, 'monkeys')
    
    
    mmmmoooonnnnkkkkeeeeyyyyssss
    • sí, esa es la exigencia obvia manera, pensé que había algo más Python, aunque. (Yo recomiendo return word en lugar de print word por el camino)
    • Creo que el resto de las opciones dadas son más python, pero hace el trabajo. Y de acuerdo en la return vs print, solo que pensé que sería más rápido para conseguir el punto a través de
    • p.s. usted también no necesita utilizar list(string) — cadenas son iterable ya. (Y me hizo upvote que por cierto!)
  8. 1

    aquí está mi ingenuo solución

    text = "123abc"
    result = ''
    for letters in text:
        result += letters*3
    
    print(result)

    de salida:
    111222333aaabbbccc

Dejar respuesta

Please enter your comment!
Please enter your name here