Necesito generar una cadena con n caracteres en Python. ¿Hay una respuesta de una línea para lograr esto con la biblioteca Python existente? Por ejemplo, necesito una cadena de 10 letras:
string_val = 'abcdefghij'
Necesito generar una cadena con n caracteres en Python. ¿Hay una respuesta de una línea para lograr esto con la biblioteca Python existente? Por ejemplo, necesito una cadena de 10 letras:
string_val = 'abcdefghij'
Respuestas:
Para repetir simplemente la misma letra 10 veces:
string_val = "x" * 10 # gives you "xxxxxxxxxx"
Y si desea 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 definir n
):
from random import choice
from string import ascii_lowercase
n = 10
string_val = "".join(choice(ascii_lowercase) for i in range(n))
Las primeras diez letras minúsculas son string.lowercase[:10]
(si ha importado el módulo de biblioteca estándar string
anteriormente, por supuesto ;-).
Otras formas de "hacer una cadena de 10 caracteres": 'x'*10
(todos los diez caracteres serán minúsculas x
s ;-), ''.join(chr(ord('a')+i) for i in xrange(10))
(las primeras diez letras minúsculas nuevamente), etc, etc ;-).
.lowercase
( ascii_lowercase
está en Python 2 reciente, así como en Python 3).
¿Por qué "una línea"? Puede encajar cualquier cosa en una línea.
Suponiendo que desea que comiencen con 'a' y se 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'
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))
Vea estas respuestas y random.py
la fuente para obtener más información.
Si puede usar letras repetidas, puede usar el *
operador:
>>> 'a'*5
'aaaaa'