Eu preciso gerar uma string com n caracteres em Python. Existe uma resposta de uma linha para conseguir isso com a biblioteca Python existente? Por exemplo, preciso de uma sequência de 10 letras:
string_val = 'abcdefghij'
Eu preciso gerar uma string com n caracteres em Python. Existe uma resposta de uma linha para conseguir isso com a biblioteca Python existente? Por exemplo, preciso de uma sequência de 10 letras:
string_val = 'abcdefghij'
Respostas:
Para simplesmente repetir a mesma letra 10 vezes:
string_val = "x" * 10 # gives you "xxxxxxxxxx"
E se você quiser algo mais complexo, como n
letras minúsculas aleatórias, ainda será apenas uma linha de código (sem contar as instruções de importação e a definição n
):
from random import choice
from string import ascii_lowercase
n = 10
string_val = "".join(choice(ascii_lowercase) for i in range(n))
As dez primeiras letras minúsculas são string.lowercase[:10]
(se você importou o módulo da biblioteca padrão string
anteriormente, é claro ;-).
Outras maneiras de "criar uma sequência de 10 caracteres": 'x'*10
(todos os dez caracteres serão minúsculos x
s ;-), ''.join(chr(ord('a')+i) for i in xrange(10))
(as dez primeiras letras minúsculas novamente), etc, etc ;-).
.lowercase
( ascii_lowercase
está nos Python 2 recentes, bem como no Python 3).
Por que "uma linha"? Você pode ajustar qualquer coisa em uma linha.
Supondo que você queira que eles comecem com 'a' e aumente em um caractere por vez (com quebra automática> 26), aqui está uma linha:
>>> mkstring = lambda(x): "".join(map(chr, (ord('a')+(y%26) for y in range(x))))
>>> mkstring(10)
'abcdefghij'
>>> mkstring(30)
'abcdefghijklmnopqrstuvwxyzabcd'
Isso pode ser um pouco fora de questão, mas para aqueles interessados na aleatoriedade da sequência gerada, minha resposta seria:
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))
Veja estas respostas e random.py
a fonte para obter mais informações.
Se você pode usar letras repetidas, pode usar o *
operador:
>>> 'a'*5
'aaaaa'