Rango de alfabeto en Python

424

En lugar de hacer una lista de caracteres alfabéticos como este:

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

¿Hay alguna forma de agruparlo en un rango o algo así? Por ejemplo, para los números se puede agrupar usando range():

range(1, 10)
Alexa Elis
fuente
Parece que alguna respuesta podría necesitar actualización para Python 3?
Charlie Parker
2
@CharlieParker No, desde el principio me aseguré de que mi respuesta funcionaría en Python 3 y Python 2 al mismo tiempo, porque utilicé string.ascii_lowercase(disponible en ambos) y no string.lowercase(solo en py2)
jamylak
engañado de stackoverflow.com/questions/14927114/… (que también parece ser un
engañado
@hkBst Parece que la diferencia es que esas preguntas piden un subconjunto de letras, mientras que esta solicita el alfabeto completo (lo que hace que la respuesta sea más específica)
jamylak

Respuestas:

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

Si realmente necesitas una lista:

>>> 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']

Y para hacerlo con 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']

Otras stringcaracterísticas útiles del módulo:

>>> 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
fuente
2
Gracias. ¿Cómo hago para revertir el orden?
Alexa Elis
63
string.ascii_lowercase[::-1]
jamylak
La lista explícita (...) en el resultado del mapa (...) es superflua, ya que el mapa ya devuelve una lista
haavee
1
@haavee En realidad, no en Python 3 mapno devuelve unlist
jamylak
1
Me pregunto si hay una manera de hacer lo mismo para un lugar específico, es decir, obtener los alfabetos español, turco, etc.
Gonzalo
106
[chr(i) for i in range(ord('a'),ord('z')+1)]
BG1850
fuente
1
Obtuve: [chr (alpha + 97) para alpha en el rango (0,27)] pero esto es mucho más intuitivo. No requiere recordar que el ascii de a es 97
peterb
55
@MoeChughtai No entiendo cómo es esto más sucinto questring.ascii_lowercase
jamylak
También: chrange = lambda s: "".join(map(chr, range(*map(ord, s))) + [c[1]]). Uso: >>> chrange("az") -> 'abcdefghijklmnopqrstuvwxyz'. Para obtener una lista, simplemente elimine"".join( )
Braden Best
@jamylak Quizás MoeChughtai quiso decir que esta respuesta realmente no ahoga la solución en largas explicaciones.
Fornost el
1
@Fornost import stringes una larga explicación?
jamylak
34

En Python 2.7 y 3 puedes usar esto:

import string
string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Como dice @Zaz: string.lowercaseestá en desuso y ya no funciona en Python 3, pero string.ascii_lowercasefunciona en ambos

Trinh Nguyen
fuente
2
En Python 3, use string.ascii_lowercase. Pero esto devuelve una cadena. En caso de que necesite una lista, creo que Bg1850 es una solución ordenada
peterb
Como la respuesta menciona arriba, string.ascii_letters, string.ascii_lowercase, string.ascii_uppercasetodo el trabajo en pitón 3+.
SlimPDX
@peterblist(string.ascii_lowercase)
Braden Best
11

Aquí hay una implementación simple de rango de letras:

Código

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

Manifestación

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

list(letter_range("a", "f", step=2))
# ['a', 'c', 'e']
pylang
fuente
2
¡Muy agradable! También funciona con caracteres no latinos. Solo lo intenté.
Marca el
3

Si está buscando un equivalente de letters[1:10]R, puede usar:

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

Imprima los alfabetos en mayúsculas y minúsculas en Python usando una función de rango incorporada

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
fuente
1

Esta es la forma más fácil que puedo entender:

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

Entonces, 97 a 122 son el número ASCII equivalente a 'a' a y 'z'. Observe las minúsculas y la necesidad de poner 123, ya que no se incluirá).

En la función de impresión, asegúrese de establecer el {:c}formato (de caracteres) y, en este caso, queremos que lo imprima todo junto sin siquiera dejar una nueva línea al final, por end=''lo que haría el trabajo.

El resultado es este: abcdefghijklmnopqrstuvwxyz

RicarHincapie
fuente