Gamma di alfabeto in Python


424

Invece di creare un elenco di caratteri alfabetici come questo:

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

c'è un modo in cui possiamo raggrupparlo in un intervallo o qualcosa del genere? Ad esempio, per i numeri può essere raggruppato usando range():

range(1, 10)

sembra che alcune risposte potrebbero aver bisogno di aggiornamenti per Python 3?
Charlie Parker,

2
@CharlieParker No, sin dall'inizio mi sono assicurato che la mia risposta avrebbe funzionato su Python 3 e Python 2 allo stesso tempo, perché l'ho usato string.ascii_lowercase(disponibile su entrambi) e non string.lowercase(solo su py2)
jamylak,

duplicato di stackoverflow.com/questions/14927114/… (che a sua volta sembra essere un
duplicato

@hkBst Sembra che la differenza sia che quelle domande chiedono un sottoinsieme di lettere, mentre questa richiede l'intero alfabeto (il che rende la risposta più specifica)
jamylak,

Risposte:


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

Se hai davvero bisogno di un elenco:

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

E per farlo 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']

Altre utili stringfunzioni del modulo:

>>> 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
Grazie. Come faccio a invertire l'ordine?
Alexa Elis,

63
string.ascii_lowercase[::-1]
jamylak,

L'elenco esplicito (...) sul risultato della mappa (...) è superfluo poiché la mappa restituisce già un elenco
haavee

1
@haavee In realtà no in Python 3 mapnon restituisce alist
jamylak il

1
Mi chiedo se c'è un modo per fare lo stesso per un locale specifico, cioè ottenere alfabeti spagnoli, turchi, ecc.
Gonzalo

106
[chr(i) for i in range(ord('a'),ord('z')+1)]

1
Ho ottenuto: [chr (alpha + 97) per alpha nel range (0,27)] ma questo è molto più intuitivo. Non richiede di ricordare che ascii di a è 97
peterb,

5
@MoeChughtai Non capisco come sia più string.ascii_lowercase
conciso

Inoltre: chrange = lambda s: "".join(map(chr, range(*map(ord, s))) + [c[1]]). Uso: >>> chrange("az") -> 'abcdefghijklmnopqrstuvwxyz'. Per un elenco, basta rimuovere"".join( )
Braden Best

@jamylak Forse MoeChughtai voleva dire che questa risposta non annega davvero la soluzione in lunghe spiegazioni.
Fornost,

1
@Fornost import stringè una spiegazione lunga?
jamylak,

34

In Python 2.7 e 3 puoi usare questo:

import string
string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Come dice @Zaz: string.lowercaseè deprecato e non funziona più in Python 3 ma string.ascii_lowercasefunziona in entrambi


2
In Python 3, usa string.ascii_lowercase. Ma questo restituisce una stringa. Nel caso abbiate bisogno di un elenco, penso, Bg1850 è una soluzione pulita
peterb

Come la risposta superiore menziona, string.ascii_letters, string.ascii_lowercase, string.ascii_uppercasetutti i lavori in pitone 3+.
SlimPDX,

@peterblist(string.ascii_lowercase)
Braden Best

11

Ecco una semplice implementazione di un intervallo di lettere:

Codice

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

dimostrazione

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

list(letter_range("a", "f", step=2))
# ['a', 'c', 'e']

2
Molto bella! Funziona anche con caratteri non latini. Ci ho appena provato.
Segna il

3

Se stai cercando un equivalente di letters[1:10]da R, puoi usare:

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

1

Stampa gli alfabeti maiuscoli e minuscoli in python usando una funzione di intervallo integrata

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

Questo è il modo più semplice che posso capire:

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

Quindi, da 97 a 122 sono il numero ASCII equivalente a "a" a "z". Nota la lettera minuscola e la necessità di inserire 123, poiché non sarà inclusa).

Nella funzione di stampa assicurati di impostare il {:c}formato (carattere) e, in questo caso, vogliamo che stampi tutto insieme senza nemmeno lasciare una nuova riga alla fine, quindi end=''farebbe il lavoro.

Il risultato è questo: abcdefghijklmnopqrstuvwxyz

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.