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 nletras 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 stringanteriormente, é claro ;-).
Outras maneiras de "criar uma sequência de 10 caracteres": 'x'*10(todos os dez caracteres serão minúsculos xs ;-), ''.join(chr(ord('a')+i) for i in xrange(10))(as dez primeiras letras minúsculas novamente), etc, etc ;-).
.lowercase( ascii_lowercaseestá 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.pya fonte para obter mais informações.
Se você pode usar letras repetidas, pode usar o *operador:
>>> 'a'*5
'aaaaa'