In Python, come posso creare una stringa di n caratteri in una riga di codice?


148

Ho bisogno di generare una stringa con n caratteri in Python. C'è una risposta su una riga per raggiungere questo obiettivo con la libreria Python esistente? Ad esempio, ho bisogno di una stringa di 10 lettere:

string_val = 'abcdefghij'

23
Lascia "in una riga di codice" per codificare i concorsi di offuscamento. Quando la soluzione a un problema è naturalmente scritta come una riga, lo sarà; altrimenti non dovrebbe essere. Usarlo come un obiettivo a sé stante è un percorso garantito per il codice cattivo.
Glenn Maynard,

3
A meno che, ovviamente, non si tratti di compiti a casa. Nel qual caso, lascia il "in una riga di codice" ma sii onesto e includi il tag [compiti a casa].
S.Lott

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

Risposte:


310

Per ripetere semplicemente la stessa lettera 10 volte:

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

E se vuoi qualcosa di più complesso, come nlettere minuscole casuali, è ancora solo una riga di codice (senza contare le istruzioni di importazione e la definizione n):

from random import choice
from string import ascii_lowercase
n = 10

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

9

Le prime dieci lettere minuscole sono string.lowercase[:10](se hai importato il modulo di libreria standard in stringprecedenza, ovviamente ;-).

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


6
In Python 3.1.1, in realtà è string.ascii_lowercase.
Lasse V. Karlsen,

1
Sì, python 3 rimosso .lowercase( ascii_lowercaseè negli ultimi Python 2 e in Python 3).
Alex Martelli,

5

se vuoi solo delle lettere:

 'a'*10  # gives 'aaaaaaaaaa'

se vuoi lettere consecutive (fino a 26):

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

3

Perché "una riga"? Puoi adattare qualsiasi cosa su una riga.

Supponendo che tu voglia che inizino con 'a', e aumentino di un carattere ogni volta (con wrapping> 26), ecco una riga:

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

2
Puoi inserire qualsiasi cosa in una riga, eh? Piuttosto un reclamo, in riferimento a: Python :)
Gregg Lind

6
Gregg: Python consente i punti e virgola come delimitatori di istruzioni, quindi se lo desideri puoi mettere un intero programma su una riga.
John Millikin,

2
Tuttavia, non è possibile eseguire un controllo di flusso arbitrario con punti e virgola. Anelli nidificati per esempio.
ricorsivo il

3

Questo potrebbe essere un po 'fuori 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 queste risposte e random.pyla fonte per ulteriori approfondimenti.


2

Se puoi usare lettere ripetute, puoi usare l' *operatore:

>>> 'a'*5

'aaaaa'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.