Muszę wygenerować ciąg z n znakami w Pythonie. Czy istnieje jedna linia odpowiedzi, aby to osiągnąć przy użyciu istniejącej biblioteki Python? Na przykład potrzebuję ciągu 10 liter:
string_val = 'abcdefghij'
Muszę wygenerować ciąg z n znakami w Pythonie. Czy istnieje jedna linia odpowiedzi, aby to osiągnąć przy użyciu istniejącej biblioteki Python? Na przykład potrzebuję ciągu 10 liter:
string_val = 'abcdefghij'
Odpowiedzi:
Aby po prostu powtórzyć tę samą literę 10 razy:
string_val = "x" * 10 # gives you "xxxxxxxxxx"
A jeśli chcesz czegoś bardziej złożonego, na przykład nlosowych małych liter, to nadal jest to tylko jeden wiersz kodu (nie licząc instrukcji importu i definiowania n):
from random import choice
from string import ascii_lowercase
n = 10
string_val = "".join(choice(ascii_lowercase) for i in range(n))
Pierwsze dziesięć małych liter to string.lowercase[:10]( stringoczywiście jeśli wcześniej zaimportowałeś moduł biblioteki standardowej ;-).
Inne sposoby „utworzenia ciągu 10 znaków”: 'x'*10(wszystkie dziesięć znaków będzie małymi literami xs ;-), ''.join(chr(ord('a')+i) for i in xrange(10))(ponownie pierwsze dziesięć małych liter), itd. ;-).
.lowercase( ascii_lowercasejest w ostatnich Python 2, a także w Pythonie 3).
Dlaczego „jedna linia”? Możesz zmieścić wszystko w jednej linii.
Zakładając, że chcesz, aby zaczynały się od „a” i za każdym razem zwiększały o jeden znak (z zawijaniem> 26), oto linia:
>>> mkstring = lambda(x): "".join(map(chr, (ord('a')+(y%26) for y in range(x))))
>>> mkstring(10)
'abcdefghij'
>>> mkstring(30)
'abcdefghijklmnopqrstuvwxyzabcd'
To może być trochę niezgodne z pytaniem, ale dla osób zainteresowanych losowością generowanego ciągu moja odpowiedź brzmiałaby:
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))
Zobacz te odpowiedzi i random.pyźródło, aby uzyskać więcej informacji.
Jeśli możesz użyć powtarzających się liter, możesz użyć *operatora:
>>> 'a'*5
'aaaaa'