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)

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'

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

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


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

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

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.