Gamme alphabet en Python

424

Au lieu de faire une liste de caractères alphabétiques comme ceci:

alpha = ['a', 'b', 'c', 'd'.........'z']

existe-t-il un moyen de le regrouper dans une plage ou quelque chose? Par exemple, pour les nombres, il peut être groupé en utilisant range():

range(1, 10)
Alexa Elis
la source
semble qu'une réponse pourrait nécessiter une mise à jour pour python 3?
Charlie Parker
2
@CharlieParker Non, depuis le début, je me suis assuré que ma réponse fonctionnerait sur Python 3 ainsi que Python 2 en même temps, car j'ai utilisé string.ascii_lowercase(disponible sur les deux) et non string.lowercase(uniquement sur py2)
jamylak
dupe de stackoverflow.com/questions/14927114/… (qui lui-même semble aussi être dupe)
hkBst
@hkBst La différence semble être que ces questions demandent une sous-série de lettres, tandis que celle-ci demande l'alphabet entier (ce qui rend la réponse plus spécifique)
jamylak

Réponses:

765
>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

Si vous avez vraiment besoin d'une liste:

>>> list(string.ascii_lowercase)
['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']

Et pour le faire avec range

>>> list(map(chr, range(97, 123))) #or list(map(chr, 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']

Autres fonctionnalités utiles du stringmodule:

>>> help(string) # on Python 3
....
DATA
    ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
    ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    digits = '0123456789'
    hexdigits = '0123456789abcdefABCDEF'
    octdigits = '01234567'
    printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
    punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
    whitespace = ' \t\n\r\x0b\x0c'
jamylak
la source
2
Merci. Comment faire pour inverser l'ordre?
Alexa Elis
64
string.ascii_lowercase[::-1]
jamylak
La liste explicite (...) sur le résultat de la carte (...) est superflue puisque la carte renvoie déjà une liste
haavee
1
@haavee En fait non dans Python 3 mapne renvoie pas delist
jamylak
1
Je me demande s'il y a moyen de faire la même chose pour un lieu spécifique, c'est-à-dire obtenir les alphabets espagnol, turc, etc.
Gonzalo
106
[chr(i) for i in range(ord('a'),ord('z')+1)]
Bg1850
la source
1
J'ai obtenu: [chr (alpha + 97) pour alpha dans la plage (0,27)] mais c'est beaucoup plus intuitif. Ne nécessite pas de se rappeler que l'ascii d'un est 97
peterb
5
@MoeChughtai Je ne comprends pas comment est-ce plus succinct questring.ascii_lowercase
jamylak
En outre: chrange = lambda s: "".join(map(chr, range(*map(ord, s))) + [c[1]]). Utilisation: >>> chrange("az") -> 'abcdefghijklmnopqrstuvwxyz'. Pour une liste, il suffit de supprimer"".join( )
Braden Best
@jamylak Peut-être que MoeChughtai signifiait que cette réponse ne noyait vraiment pas la solution dans de longues explications.
Fornost
1
@Fornost import stringest une longue explication?
jamylak
34

En Python 2.7 et 3, vous pouvez utiliser ceci:

import string
string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Comme @Zaz le dit: string.lowercaseest obsolète et ne fonctionne plus en Python 3 mais string.ascii_lowercasefonctionne dans les deux

Trinh Nguyen
la source
2
Dans Python 3, utilisez string.ascii_lowercase. Mais cela renvoie une chaîne. Au cas où vous auriez besoin d'une liste, je pense que Bg1850 est une solution
intéressante
Comme la réponse de haut mentionne string.ascii_letters, string.ascii_lowercase, string.ascii_uppercasetout le travail en python 3+.
SlimPDX
@peterblist(string.ascii_lowercase)
Braden Best
11

Voici une implémentation simple de plage de lettres:

Code

def letter_range(start, stop="{", step=1):
    """Yield a range of lowercase letters.""" 
    for ord_ in range(ord(start.lower()), ord(stop.lower()), step):
        yield chr(ord_)

Démo

list(letter_range("a", "f"))
# ['a', 'b', 'c', 'd', 'e']

list(letter_range("a", "f", step=2))
# ['a', 'c', 'e']
pylang
la source
2
Très agréable! Fonctionne également avec des caractères non latins. Je viens d'essayer.
MarkS
3

Si vous recherchez un équivalent de letters[1:10]from R, vous pouvez utiliser:

 import string
 list(string.ascii_lowercase[0:10])
Qaswed
la source
1

Imprimez les alphabets majuscules et minuscules en python à l'aide d'une fonction de plage intégrée

def upperCaseAlphabets():
    print("Upper Case Alphabets")
    for i in range(65, 91):
        print(chr(i), end=" ")
    print()

def lowerCaseAlphabets():
    print("Lower Case Alphabets")
    for i in range(97, 123):
        print(chr(i), end=" ")

upperCaseAlphabets();
lowerCaseAlphabets();
lakshmikandan
la source
1

Voici la façon la plus simple de comprendre:

#!/usr/bin/python3 for i in range(97, 123): print("{:c}".format(i), end='')

Ainsi, 97 à 122 sont le nombre ASCII équivalent à «a» à et «z». Notez les minuscules et la nécessité de mettre 123, car il ne sera pas inclus).

Dans la fonction d'impression, assurez-vous de définir le {:c}format (caractère), et, dans ce cas, nous voulons qu'il imprime tout ensemble sans même laisser une nouvelle ligne à la fin, alors end=''ferait le travail.

Le résultat est le suivant: abcdefghijklmnopqrstuvwxyz

RicarHincapie
la source