Wie erstelle ich in Python eine Zeichenfolge mit n Zeichen in einer Codezeile?
148
Ich muss eine Zeichenfolge mit n Zeichen in Python generieren. Gibt es eine einzeilige Antwort, um dies mit der vorhandenen Python-Bibliothek zu erreichen? Zum Beispiel brauche ich eine Zeichenfolge aus 10 Buchstaben:
Lassen Sie "in einer Codezeile", um Verschleierungswettbewerbe zu codieren. Wenn die Lösung eines Problems natürlich als eine Zeile geschrieben ist, wird es sein; sonst sollte es nicht sein. Die Verwendung als eigenes Ziel ist ein garantierter Weg zu bösem Code.
Glenn Maynard
3
Es sei denn natürlich, dies sind Hausaufgaben. In diesem Fall lassen Sie das "in einer Codezeile", aber seien Sie ehrlich und fügen Sie das Tag [Hausaufgaben] ein.
S.Lott
5
Es ist eigentlich keine Hausaufgabenfrage, ich brauchte nur eine Zeichenfolge von n Länge in meinen Testskripten. Ich habe vergessen, dass in Python ein Zeichen mit n multipliziert werden kann, wobei n eine positive ganze Zahl ist, um das zu erreichen, was ich will.
So wiederholen Sie denselben Buchstaben einfach zehnmal:
string_val ="x"*10# gives you "xxxxxxxxxx"
Und wenn Sie etwas Komplexeres wie nzufällige Kleinbuchstaben wünschen , ist es immer noch nur eine Codezeile (ohne die Importanweisungen und die Definition n):
from random import choice
from string import ascii_lowercase
n =10
string_val ="".join(choice(ascii_lowercase)for i in range(n))
Die ersten zehn Kleinbuchstaben sind string.lowercase[:10](wenn Sie das Standardbibliotheksmodul stringzuvor importiert haben , natürlich ;-).
Andere Möglichkeiten, "eine Zeichenfolge mit 10 Zeichen zu 'x'*10erstellen ": (Alle zehn Zeichen sind Kleinbuchstaben x;-), ''.join(chr(ord('a')+i) for i in xrange(10))(wieder die ersten zehn Kleinbuchstaben) usw. usw. ;-).
Warum "eine Zeile"? Sie können alles in eine Zeile einfügen.
Angenommen, Sie möchten, dass sie mit 'a' beginnen und jedes Mal um ein Zeichen erhöht werden (mit Umbruch> 26), dann ist hier eine Zeile:
>>> mkstring =lambda(x):"".join(map(chr,(ord('a')+(y%26)for y in range(x))))>>> mkstring(10)'abcdefghij'>>> mkstring(30)'abcdefghijklmnopqrstuvwxyzabcd'
Sie können alles in eine Zeile einfügen, oder? Ein ziemlicher Anspruch, re: Python :)
Gregg Lind
6
Gregg: Python erlaubt Semikolons als Anweisungsbegrenzer, sodass Sie bei Bedarf ein ganzes Programm in eine Zeile setzen können.
John Millikin
2
Sie können jedoch keine willkürliche Flusskontrolle mit Semikolons durchführen. Verschachtelte Schleifen zum Beispiel.
rekursiv
3
Dies mag ein wenig von der Frage abweichen, aber für diejenigen, die an der Zufälligkeit der generierten Zeichenfolge interessiert sind, wäre meine Antwort:
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))
Antworten:
So wiederholen Sie denselben Buchstaben einfach zehnmal:
Und wenn Sie etwas Komplexeres wie
n
zufällige Kleinbuchstaben wünschen , ist es immer noch nur eine Codezeile (ohne die Importanweisungen und die Definitionn
):quelle
Die ersten zehn Kleinbuchstaben sind
string.lowercase[:10]
(wenn Sie das Standardbibliotheksmodulstring
zuvor importiert haben , natürlich ;-).Andere Möglichkeiten, "eine Zeichenfolge mit 10 Zeichen zu
'x'*10
erstellen ": (Alle zehn Zeichen sind Kleinbuchstabenx
;-),''.join(chr(ord('a')+i) for i in xrange(10))
(wieder die ersten zehn Kleinbuchstaben) usw. usw. ;-).quelle
.lowercase
(ascii_lowercase
ist in den letzten Python 2 sowie in Python 3 enthalten).wenn Sie nur irgendwelche Buchstaben wollen:
Wenn Sie aufeinanderfolgende Buchstaben möchten (bis zu 26):
quelle
Warum "eine Zeile"? Sie können alles in eine Zeile einfügen.
Angenommen, Sie möchten, dass sie mit 'a' beginnen und jedes Mal um ein Zeichen erhöht werden (mit Umbruch> 26), dann ist hier eine Zeile:
quelle
Dies mag ein wenig von der Frage abweichen, aber für diejenigen, die an der Zufälligkeit der generierten Zeichenfolge interessiert sind, wäre meine Antwort:
Weitere Informationen finden Sie in diesen Antworten und in
random.py
der Quelle.quelle
Wenn Sie wiederholte Buchstaben verwenden können, können Sie den
*
Operator verwenden:quelle