web-dev-qa-db-fra.com

En Python, comment créer une chaîne de n caractères sur une ligne de code?

J'ai besoin de générer une chaîne avec n caractères en Python. Existe-t-il une réponse d'une ligne pour y parvenir avec la bibliothèque existante Python? Par exemple, j'ai besoin d'une chaîne de 10 lettres:

string_val = 'abcdefghij'
115
Thierry Lam

Pour répéter simplement la même lettre 10 fois:

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

Et si vous voulez quelque chose de plus complexe, comme n lettres minuscules aléatoires, il ne reste qu'une ligne de code (sans compter les instructions d'importation et sans définir n):

from random import choice
from string import ascii_lowercase
n = 10

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

Les dix premières lettres minuscules sont string.lowercase[:10] (Si vous avez précédemment importé le module de bibliothèque standard string, bien sûr ;-).

Autres façons de "créer une chaîne de 10 caractères": 'x'*10 (Tous les dix caractères seront en minuscule xs ;-), ''.join(chr(ord('a')+i) for i in xrange(10)) (les dix premières lettres minuscules à nouveau ), etc;-).

9
Alex Martelli

si vous voulez juste des lettres:

 'a'*10  # gives 'aaaaaaaaaa'

si vous voulez des lettres consécutives (jusqu'à 26):

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

Pourquoi "une ligne"? Vous pouvez adapter n'importe quoi sur une seule ligne.

En supposant que vous vouliez qu'ils commencent par 'a' et que vous incrémentiez d'un caractère à chaque fois (avec un retour à la ligne> 26), voici une ligne:

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

Si vous pouvez utiliser des lettres répétées, vous pouvez utiliser le * opérateur:

>>> 'a'*5

'aaaaa'
2
Fragsworth

C'est peut-être un peu en dehors de la question, mais pour ceux intéressés par le caractère aléatoire de la chaîne générée, ma réponse serait:

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

Voir la source de cesréponses et de random.py Pour plus d'informations.

1
foudfou