En Python, ¿cómo creo una cadena de n caracteres en una línea de código?

3 minutos de lectura

avatar de usuario
Thierry Lam

Necesito generar una cadena con n caracteres en Python. ¿Hay una respuesta de una línea para lograr esto con la biblioteca de Python existente? Por ejemplo, necesito una cadena de 10 letras:

string_val="abcdefghij"

  • Deje “en una línea de código” para los concursos de ofuscación de código. Cuando la solución a un problema se escribe naturalmente en una sola línea, será; de lo contrario no debería ser. Usarlo como un objetivo propio es un camino garantizado hacia el código desagradable.

    –Glenn Maynard

    14 de septiembre de 2009 a las 22:32

  • A menos, por supuesto, que esto sea tarea. En cuyo caso, deje el “en una línea de código”, pero sea honesto e incluya el [homework] etiqueta.

    – S. Lott

    15 de septiembre de 2009 a las 0:12

  • En realidad, no es una pregunta de tarea, solo necesitaba una cadena de longitud n en mis scripts de prueba. Olvidé que en Python, un carácter se puede multiplicar por n donde n es un número entero positivo para lograr lo que quiero.

    – Thierry Lam

    15 de septiembre de 2009 a las 1:08

  • consulte este stackoverflow.com/a/3391106/3779480

    – Digvi Jay Patil

    16 de junio de 2015 a las 11:24

avatar de usuario
eli cortesano

Para simplemente repetir la misma letra 10 veces:

string_val = "x" * 10  # gives you "xxxxxxxxxx"

Y si quieres algo más complejo, como n letras minúsculas aleatorias, sigue siendo solo una línea de código (sin contar las declaraciones de importación y la definición n):

from random import choice
from string import ascii_lowercase
n = 10

string_val = "".join(choice(ascii_lowercase) for i in range(n))

Las diez primeras letras minúsculas son string.lowercase[:10] (si ha importado el módulo de biblioteca estándar string previamente, por supuesto ;-).

Otras formas de “hacer una cadena de 10 caracteres”: 'x'*10 (los diez caracteres estarán en minúsculas) xs;-), ''.join(chr(ord('a')+i) for i in xrange(10)) (otra vez las primeras diez minúsculas), etc, etc ;-).

  • En Python 3.1.1, en realidad es string.ascii_lowercase.

    – Lasse V. Karlsen

    14/09/2009 a las 21:31

  • Sí, python 3 eliminado .lowercase (ascii_lowercase está en Python 2 reciente, así como en Python 3).

    – Alex Martelli

    14/09/2009 a las 21:37

Si solo quieres letras:

 'a'*10  # gives 'aaaaaaaaaa'

si quieres letras consecutivas (hasta 26):

 ''.join(['%c' % x for x in range(97, 97+10)])  # gives 'abcdefghij'

¿Por qué “una línea”? Puede encajar cualquier cosa en una línea.

Suponiendo que desea que comiencen con ‘a’ e incrementen en un carácter cada vez (con ajuste> 26), aquí hay una línea:

>>> mkstring = lambda(x): "".join(map(chr, (ord('a')+(y%26) for y in range(x))))
>>> mkstring(10)
'abcdefghij'
>>> mkstring(30)
'abcdefghijklmnopqrstuvwxyzabcd'

avatar de usuario
foudfou

Esto podría estar un poco fuera de lugar, pero para aquellos interesados ​​en la aleatoriedad de la cadena generada, mi respuesta sería:

import os
import string

def _pwd_gen(size=16):
    chars = string.letters
    chars_len = len(chars)
    return str().join(chars[int(ord(c) / 256. * chars_len)] for c in os.urandom(size))

Mira estas respuestas y random.pyFuente de para obtener más información.

avatar de usuario
Fragsworth

Si puede usar letras repetidas, puede usar el * operador:

>>> 'a'*5

'aaaaa'

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad