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:

string_val = 'abcdefghij'
Thierry Lam
quelle
23
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.
Thierry Lam
Siehe
DigviJay Patil

Antworten:

309

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))
Eli Courtwright
quelle
9

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. ;-).

Alex Martelli
quelle
6
In Python 3.1.1 ist es tatsächlich string.ascii_lowercase.
Lasse V. Karlsen
1
Ja, Python 3 wurde entfernt .lowercase( ascii_lowercaseist in den letzten Python 2 sowie in Python 3 enthalten).
Alex Martelli
5

wenn Sie nur irgendwelche Buchstaben wollen:

 'a'*10  # gives 'aaaaaaaaaa'

Wenn Sie aufeinanderfolgende Buchstaben möchten (bis zu 26):

 ''.join(['%c' % x for x in range(97, 97+10)])  # gives 'abcdefghij'
Peter
quelle
3

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'
John Millikin
quelle
2
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))

Weitere Informationen finden Sie in diesen Antworten und in random.pyder Quelle.

Foudfou
quelle
2

Wenn Sie wiederholte Buchstaben verwenden können, können Sie den *Operator verwenden:

>>> 'a'*5

'aaaaa'
Fragsworth
quelle