en Perl, pour obtenir une liste de toutes les cordes de "A" à "AZC", à la seule chose à faire consiste à utiliser l'opérateur de gamme:
>>> [chr(c) for c in range(ord("a"), ord("z") + 1)] ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
6 Réponses :
Utilisez l'appel du produit dans iTERTOOLS et ASCII_LETTERS de STRING.
from string import ascii_letters from itertools import product if __name__ == '__main__': values = [] for i in xrange(1, 4): values += [''.join(x) for x in product(ascii_letters[:26], repeat=i)] print values
Il devrait être ascii_loWercase code> et vous n'avez pas encore pris en compte l'arrêt de "AZC".
HMM, merci, ici, je peux avoir une liste de chaîne d'A à Zzz. Donc, je ferai une deuxième boucle pour copier les éléments de la première boucle au second et arrêter tout en rencontrant la chaîne "End". Je vais répondre à ma question avec un échantillon complet de code. Merci beaucoup !
def strrange(end): values = [] for i in range(1, len(end) + 1): values += [''.join(x) for x in product(ascii_lowercase, repeat=i)] return values[:values.index(end) + 1]
Problèmes majeurs avec ceci: 1) Utilisation de xRange code> au lieu de
plage code>.
xRange code> n'a plus d'avantage sur code> plage code>, car
plage code> est un générateur et ne génère pas la liste des résultats. Ainsi,
xrange code> est obsolète et IIRC, pas même en Python 3. 2) Construction
Endvalues code> à partir de
Valeurs code> Lorsque vous auriez pu simplement utiliser
list.index () code> et une opération de tranches. 3) Ce n'est pas la manière dont vous marquez les questions telles que la réponse.
@Mike, Xrange code> est toujours requis dans Python 2.7, qui a été publié il y a moins de 2 semaines.
plage code> retourne toujours une liste.
J'ai mis à jour celui-ci pour utiliser des tranches et des index (). Aussi supprimé le texte d'emballage.
Une suggestion purement basée sur les itérateurs:
import string import itertools def string_range(letters=string.ascii_lowercase, start="a", end="z"): return itertools.takewhile(end.__ne__, itertools.dropwhile(start.__ne__, (x for i in itertools.count(1) for x in itertools.imap("".join, itertools.product(letters, repeat=i))))) print list(string_range(end="azc"))
Version génératrice: EDIT: strong> @iHightower demande dans les commentaires: p> Je n'ai aucune idée de ce que je devrais faire si je veux imprimer de 'B' à "AZC". P>
blockQuote> Vous voulez donc commencer avec autre chose que
'a' code>. Il suffit de supprimer quoi que ce soit avant la valeur de départ: p>
Ouais ! Certainement bien (ne peut pas voter comme je ne suis que 11 réputation, mais sonne bien!)
Pourrait être une bonne réponse ... mais, comment l'utilise-t-on ... comme un débutant ... Je n'ai aucune idée de ce que je devrais faire si je veux imprimer de 'B' à "AZC". Je répète de la lettre "B" à la lettre "AZC". La fonction peut être bonne ... mais comme débutant, je n'ai aucune idée de la façon dont je pourrais l'utiliser pour faire le travail réel et l'impression.
Voici une meilleure façon de le faire, bien que vous ayez besoin d'une fonction de conversion: et voici votre fonction (merci wikipedia ): p> je suis cloué sur l'option de conversion minuscule, juste au cas où vous le souhaitiez. < / p> p>
J'ai généralisé la réponse acceptée pour pouvoir commencer le milieu et utiliser autre que minuscule: