2009-12-24 5 views

Antwort

42
''.join(random.choice(string.lowercase) for x in range(X)) 
+2

Schöne Verwendung von Generatorausdrücken. Aber während wir Speicher sparen, könnte auch xrange statt range verwendet werden. –

+3

CytokineStorm, ab Python 3.x, 'range()' verhält sich genauso wie 'xrange()'. –

+0

Denken Sie daran, dass jede vom Zufallsmodul erzeugte Sequenz * nicht * kryptographisch sicher ist. – Federico

20

Wenn Sie keine Wiederholungen:

import string, random 
''.join(random.sample(string.ascii_lowercase, X)) 

Wollen Sie (potentiellen) Wiederholungen:

import string, random 
''.join(random.choice(string.ascii_lowercase) for _ in xrange(X))) 

Das, dass Sie von a-z ist vorausgesetzt, bedeutet "ASCII Kleinbuchstaben", andernfalls Ihr Alphabet könnte in diesen Ausdrücken anders ausgedrückt werden (z. B. string.lowercase für "länderabhängige Kleinbuchstaben", die akzentuiert sein können oder anders d Kleinbuchstaben (abhängig von Ihrem aktuellen Gebietsschema).

+0

FYI, 'string.lowercase' ist selten mehr als ASCII, aber Sie legen das Gebietsschema in meiner Erfahrung fest. Ich stelle nur fest, dass es für "aktuelles Alphabet" keine echte Variable gibt. – u0b34a0f6ae

+0

Keines dieser Codebeispiele impliziert Eindeutigkeit. Hier ist ein Test: http://pastie.org/8619409 – Altaisoft

+0

@Altaisoft: Sie missverstehen, wie 'Probe' funktioniert. Es zeichnet nur einmal ein beliebiges Zeichen, aber es wird nicht in der richtigen Reihenfolge gezeichnet. Also wären 'abc' und' cba' unterschiedliche Ausgaben. Ihr Test ist nur gültig (hätte eine große Anzahl von Überlappungen erwartet), wenn Sie annehmen, dass 'sample' sie in der Reihenfolge zurückgibt, in der sie in der ursprünglichen Zeichenkette erschienen sind, aber da sie in beliebiger Reihenfolge erscheinen können, gibt es' (26 + 7) !/7! 'Optionen; Überschneidungen sind nicht üblich. – ShadowRanger

Verwandte Themen