Zakres alfabetu w Pythonie

423

Zamiast tworzyć listę takich znaków alfabetu:

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

czy jest jakiś sposób, aby pogrupować go w zakres lub coś takiego? Na przykład dla liczb można je pogrupować za pomocą range():

range(1, 10)
Alexa Elis
źródło
wydaje się, że jakaś odpowiedź może wymagać aktualizacji dla Pythona 3?
Charlie Parker,
2
@CharlieParker Nie, od samego początku upewniłem się, że moja odpowiedź będzie działać w Pythonie 3 i Pythonie 2 w tym samym czasie, ponieważ użyłem string.ascii_lowercase(dostępne na obu) i nie string.lowercase(tylko na py2)
jamylak
dupe z stackoverflow.com/questions/14927114/… (który sam również wydaje się dupe)
hkBst
@ hkBst Wydaje się, że różnica polega na tym, że pytania te wymagają podzestawu liter, podczas gdy ten wymaga całego alfabetu (co czyni odpowiedź bardziej szczegółową)
jamylak

Odpowiedzi:

764
>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

Jeśli naprawdę potrzebujesz listy:

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

I zrobić to z 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']

Inne przydatne stringfunkcje modułu:

>>> 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
źródło
2
Dzięki. Jak to zrobić, aby odwrócić kolejność?
Alexa Elis,
63
string.ascii_lowercase[::-1]
jamylak
Wyraźna lista (...) w wyniku mapy (...) jest zbędna, ponieważ mapa już zwraca listę
haavee
1
@haavee Właściwie nie w Pythonie 3 mapnie zwraca alist
jamylak
1
Zastanawiam się, czy istnieje sposób, aby zrobić to samo dla konkretnej lokalizacji, tj.
Gonzalo
106
[chr(i) for i in range(ord('a'),ord('z')+1)]
Bg1850
źródło
1
Mam: [chr (alfa + 97) dla alfa w zakresie (0,27)], ale jest to o wiele bardziej intuicyjne. Nie wymaga pamiętania, że ​​ascii to 97
peterb
5
@MoeChughtai Nie rozumiem, jak to jest bardziej zwięzłe niżstring.ascii_lowercase
jamylak
Również: chrange = lambda s: "".join(map(chr, range(*map(ord, s))) + [c[1]]). Zastosowanie: >>> chrange("az") -> 'abcdefghijklmnopqrstuvwxyz'. Aby wyświetlić listę, po prostu usuń"".join( )
Braden Best
@jamylak Może MoeChughtai oznaczało, że ta odpowiedź naprawdę nie zagłusza rozwiązania w długich wyjaśnieniach.
Fornost
1
@Fornost import stringto długie wyjaśnienie?
jamylak 27.01.19
34

W Pythonie 2.7 i 3 możesz użyć tego:

import string
string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Jak mówi @Zaz: string.lowercasejest przestarzałe i nie działa już w Pythonie 3, ale string.ascii_lowercasedziała w obu

Trinh Nguyen
źródło
2
W Pythonie 3 użyj string.ascii_lowercase. Ale to zwraca ciąg. Jeśli potrzebujesz listy, myślę, że Bg1850 to fajne rozwiązanie
peterb
Jako górny odpowiedź wspomina, string.ascii_letters, string.ascii_lowercase, string.ascii_uppercasewszystkie prace w Pythonie 3+.
SlimPDX,
@peterblist(string.ascii_lowercase)
Braden Best
11

Oto prosta implementacja zakresu liter:

Kod

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

Próbny

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

list(letter_range("a", "f", step=2))
# ['a', 'c', 'e']
pylang
źródło
2
Bardzo dobrze! Działa również ze znakami spoza alfabetu łacińskiego. Właśnie próbowałem.
MarkS
3

Jeśli szukasz odpowiednika letters[1:10]z R, możesz użyć:

 import string
 list(string.ascii_lowercase[0:10])
Qaswed
źródło
1

Drukuj wielkie i małe litery alfabetu w pythonie za pomocą wbudowanej funkcji zakresu

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
źródło
1

Oto najprostszy sposób, w jaki mogę dowiedzieć się:

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

Zatem od 97 do 122 to liczba ASCII równoważna „a” do i „z”. Zwróć uwagę na małe litery i konieczność wstawienia 123, ponieważ nie zostanie uwzględnione).

W funkcji drukowania upewnij się, że ustawiłeś {:c}format (znakowy), a w tym przypadku chcemy, aby wydrukował wszystko razem, nie pozwalając nawet na nowy wiersz na końcu, więc end=''wykona to zadanie.

Rezultat jest następujący: abcdefghijklmnopqrstuvwxyz

RicarHincapie
źródło