2009-09-14 12 views
83

Ho bisogno di generare una stringa con n caratteri in Python. C'è una risposta a una riga per raggiungere questo obiettivo con la libreria Python esistente? Per esempio, ho bisogno di una stringa di 10 lettere:In Python, come posso creare una stringa di n caratteri in una riga di codice?

string_val = 'abcdefghij' 
+16

Lasciare "in una riga di codice" per codificare i concorsi di offuscamento. Quando la soluzione di un problema è scritta naturalmente come una riga, lo sarà; altrimenti non dovrebbe essere. Usarlo come un obiettivo è un percorso garantito verso un codice sgradevole. –

+3

A meno che, naturalmente, questo non sia compito. In tal caso, lascia "in una riga di codice" ma sii onesto e includi il tag [homework]. –

+5

In realtà non è una domanda per i compiti a casa, avevo solo bisogno di una stringa di lunghezza nei miei script di test. Ho dimenticato che in Python, un char può essere moltiplicato per n dove n è un numero intero positivo per ottenere ciò che voglio. –

risposta

191

Per sufficiente ripetere la stessa lettera 10 volte:

string_val = "x" * 10 # gives you "xxxxxxxxxx" 

E se volete qualcosa di più complesso, come n lettere minuscole casuali, è ancora solo una riga di codice (senza contare le istruzioni import e definendo n):

from random import choice 
from string import lowercase 
n = 10 

string_val = "".join(choice(lowercase) for i in range(n)) 
9

Le prime dieci lettere minuscole sono string.lowercase[:10] (se è stato importato il modulo di libreria standard string in precedenza, naturalmente ;-).

Altri modi per "fare una stringa di 10 caratteri": 'x'*10 (tutti i dieci personaggi saranno minuscolo x s ;-), ''.join(chr(ord('a')+i) for i in xrange(10)) (le prime dieci lettere minuscole di nuovo), ecc, ecc ;-).

+4

In Python 3.1.1, è in realtà string.ascii_lowercase. –

+0

Yep, python 3 ha rimosso '.lowercase' (' ascii_lowercase' è nei recenti Python 2 e in Python 3). –

2

Se è possibile utilizzare le lettere ripetute, è possibile utilizzare l'operatore di *:

>>> 'a'*5 

'aaaaa' 
3

Perché "una linea"? Puoi montare qualsiasi cosa su una linea.

Supponendo che si desidera loro di iniziare con 'a', e l'incremento di un carattere ogni volta (con lo spostamento> 26), ecco una linea:

>>> mkstring = lambda(x): "".join(map(chr, (ord('a')+(y%26) for y in range(x)))) 
>>> mkstring(10) 
'abcdefghij' 
>>> mkstring(30) 
'abcdefghijklmnopqrstuvwxyzabcd' 
+2

Puoi montare qualsiasi cosa su una sola riga, eh? Piuttosto un reclamo, re: Python :) –

+6

Gregg: Python consente il punto e virgola come delimitatori di istruzioni, quindi puoi mettere un intero programma su una riga se lo desideri. –

+2

Tuttavia non è possibile eseguire il controllo di flusso arbitrario con punto e virgola.Loop annidati, per esempio. – recursive

3

se si desidera solo qualche lettera:

'a'*10 # gives 'aaaaaaaaaa' 

se volete lettere consecutive (fino a 26):

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

questo potrebbe essere un po 'fuori la questione, ma per coloro che sono interessati alla casualità della stringa generata, la mia risposta sarebbe:

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

Vedi theseanswers e s' random.py fonte per un quadro più chiaro.

Problemi correlati