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'

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

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

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


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'

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'

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.


2

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

>>> 'a'*5

'aaaaa'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.