En Python, comment créer une chaîne de n caractères dans une ligne de code?
148
J'ai besoin de générer une chaîne avec n caractères en Python. Existe-t-il une réponse en une ligne pour y parvenir avec la bibliothèque Python existante? Par exemple, j'ai besoin d'une chaîne de 10 lettres:
Laissez "dans une ligne de code" pour coder les concours d'obfuscation. Lorsque la solution d'un problème est naturellement écrite sur une seule ligne, elle le sera; sinon ça ne devrait pas être. L'utiliser comme un objectif en soi est un chemin garanti vers du code malveillant.
Glenn Maynard le
3
Sauf, bien sûr, ce sont des devoirs. Dans ce cas, laissez le "dans une ligne de code" mais soyez honnête et incluez la balise [devoirs].
S.Lott
5
Ce n'est en fait pas une question de devoir, j'avais juste besoin d'une chaîne de longueur n dans mes scripts de test. J'ai oublié qu'en Python, un caractère peut être multiplié par n où n est un entier positif pour obtenir ce que je veux.
Et si vous voulez quelque chose de plus complexe, comme ndes lettres minuscules aléatoires, ce n'est toujours qu'une seule 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))
Les dix premières lettres minuscules sont string.lowercase[:10](si vous avez stringprécédemment importé le module de bibliothèque standard , bien sûr ;-).
Autres façons de "créer une chaîne de 10 caractères": 'x'*10(tous les dix caractères seront des xs minuscules ;-), ''.join(chr(ord('a')+i) for i in xrange(10))(les dix premières lettres minuscules à nouveau), etc, etc ;-).
Pourquoi "une ligne"? Vous pouvez insérer n'importe quoi sur une seule ligne.
En supposant que vous vouliez qu'ils commencent par `` a '' et incrémentent d'un caractère à chaque fois (avec 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'
Vous pouvez mettre n'importe quoi sur une seule ligne, hein? Tout à fait une réclamation, re: Python :)
Gregg Lind
6
Gregg: Python autorise les points-virgules comme délimiteurs d'instructions, vous pouvez donc mettre un programme entier sur une seule ligne si vous le souhaitez.
John Millikin le
2
Cependant, vous ne pouvez pas faire de contrôle de flux arbitraire avec des points-virgules. Des boucles imbriquées par exemple.
récursif le
3
Cela peut être un peu hors de la question, mais pour ceux qui s'intéressent au 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 ces réponses et random.pyla source pour plus d'informations.
Réponses:
Pour répéter simplement la même lettre 10 fois:
Et si vous voulez quelque chose de plus complexe, comme
n
des lettres minuscules aléatoires, ce n'est toujours qu'une seule ligne de code (sans compter les instructions d'importation et sans définirn
):la source
Les dix premières lettres minuscules sont
string.lowercase[:10]
(si vous avezstring
précédemment importé le module de bibliothèque standard , bien sûr ;-).Autres façons de "créer une chaîne de 10 caractères":
'x'*10
(tous les dix caractères seront desx
s minuscules ;-),''.join(chr(ord('a')+i) for i in xrange(10))
(les dix premières lettres minuscules à nouveau), etc, etc ;-).la source
.lowercase
(ascii_lowercase
est dans Python 2 récent ainsi que dans Python 3).si vous voulez juste des lettres:
si vous voulez des lettres consécutives (jusqu'à 26):
la source
Pourquoi "une ligne"? Vous pouvez insérer n'importe quoi sur une seule ligne.
En supposant que vous vouliez qu'ils commencent par `` a '' et incrémentent d'un caractère à chaque fois (avec retour à la ligne> 26), voici une ligne:
la source
Cela peut être un peu hors de la question, mais pour ceux qui s'intéressent au caractère aléatoire de la chaîne générée, ma réponse serait:
Voir ces réponses et
random.py
la source pour plus d'informations.la source
Si vous pouvez utiliser des lettres répétées, vous pouvez utiliser l'
*
opérateur:la source