Jak w Pythonie utworzyć ciąg n znaków w jednej linii kodu?
148
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:
Pozostaw „w jednej linii kodu”, aby kodować konkursy zaciemniania kodu. Kiedy rozwiązanie problemu jest naturalnie zapisane w jednej linii, będzie to; w przeciwnym razie nie powinno. Używanie go jako własnego celu jest gwarantowaną ścieżką do nieprzyjemnego kodu.
Glenn Maynard,
3
Chyba że jest to praca domowa. W takim przypadku pozostaw „w jednym wierszu kodu”, ale bądź szczery i dołącz tag [praca domowa].
S.Lott,
5
Właściwie to nie jest zadanie domowe, potrzebowałem tylko ciągu n długości w moich skryptach testowych. Zapomniałem, że w Pythonie znak można pomnożyć przez n, gdzie n jest dodatnią liczbą całkowitą, aby osiągnąć to, czego chcę.
Thierry Lam,
skieruj
Odpowiedzi:
310
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. ;-).
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'
Odpowiedzi:
Aby po prostu powtórzyć tę samą literę 10 razy:
A jeśli chcesz czegoś bardziej złożonego, na przykład
n
losowych małych liter, to nadal jest to tylko jeden wiersz kodu (nie licząc instrukcji importu i definiowanian
):źródło
Pierwsze dziesięć małych liter to
string.lowercase[:10]
(string
oczywiś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 literamix
s ;-),''.join(chr(ord('a')+i) for i in xrange(10))
(ponownie pierwsze dziesięć małych liter), itd. ;-).źródło
.lowercase
(ascii_lowercase
jest w ostatnich Python 2, a także w Pythonie 3).jeśli chcesz tylko litery:
jeśli chcesz otrzymywać kolejne litery (do 26):
źródło
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:
źródło
To może być trochę niezgodne z pytaniem, ale dla osób zainteresowanych losowością generowanego ciągu moja odpowiedź brzmiałaby:
Zobacz te odpowiedzi i
random.py
źródło, aby uzyskać więcej informacji.źródło
Jeśli możesz użyć powtarzających się liter, możesz użyć
*
operatora:źródło