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

148

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'
Thierry Lam
fuente
23
Deje "en una línea de código" para codificar concursos de ofuscación. Cuando la solución a un problema se escribe naturalmente como una línea, lo será; de lo contrario no debería ser. Usarlo como un objetivo propio es una ruta garantizada hacia un código desagradable.
Glenn Maynard
3
A menos, por supuesto, que esto sea tarea. En ese caso, deje el "en una línea de código" pero sea honesto e incluya la etiqueta [tarea].
S.Lott
55
En realidad no es una pregunta de tarea, solo necesitaba una cadena de n de longitud en mis scripts de prueba. Olvidé que en Python, un carácter puede multiplicarse por n donde n es un número entero positivo para lograr lo que quiero.
Thierry Lam
consulte este stackoverflow.com/a/3391106/3779480
DigviJay Patil

Respuestas:

310

Para repetir simplemente la misma letra 10 veces:

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

Y si desea algo más complejo, como nletras 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))
Eli Courtwright
fuente
9

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

Otras formas de "hacer una cadena de 10 caracteres": 'x'*10(todos los diez caracteres serán minúsculas xs ;-), ''.join(chr(ord('a')+i) for i in xrange(10))(las primeras diez letras minúsculas nuevamente), etc, etc ;-).

Alex Martelli
fuente
66
En Python 3.1.1, es string.ascii_lowercase en realidad.
Lasse V. Karlsen
1
Sí, Python 3 eliminado .lowercase( ascii_lowercaseestá en Python 2 reciente, así como en Python 3).
Alex Martelli
5

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'
Peter
fuente
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'
John Millikin
fuente
2
Puedes encajar cualquier cosa en una línea, ¿eh? Todo un reclamo, re: Python :)
Gregg Lind
66
Gregg: Python permite el punto y coma como delimitadores de sentencias, por lo que puede colocar un programa completo en una línea si lo desea.
John Millikin
2
Sin embargo, no puede hacer un control de flujo arbitrario con punto y coma. Bucles anidados, por ejemplo.
recursivo
3

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.pyla fuente para obtener más información.

foudfou
fuente
2

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

>>> 'a'*5

'aaaaa'
Fragsworth
fuente