Alphabetbereich in Python


422

Anstatt eine Liste von Alphabetzeichen wie folgt zu erstellen:

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

Gibt es eine Möglichkeit, es zu einem Bereich oder etwas zu gruppieren? Für Zahlen kann es beispielsweise gruppiert werden mit range():

range(1, 10)

scheint eine Antwort ein Update für Python 3 zu benötigen?
Charlie Parker

2
@CharlieParker Nein, von Anfang an habe ich sichergestellt, dass meine Antwort sowohl auf Python 3 als auch auf Python 2 gleichzeitig funktioniert, da ich string.ascii_lowercase(verfügbar auf beiden) und nicht string.lowercase(nur auf py2)
jamylak

Betrüger von stackoverflow.com/questions/14927114/… (was selbst auch ein Betrüger zu sein scheint)
hkBst

@hkBst Der Unterschied scheint zu sein, dass diese Fragen nach einer Teilmenge von Buchstaben fragen, während diese das gesamte Alphabet anfordert (was die Antwort spezifischer macht)
Jamylak

Antworten:


763
>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

Wenn Sie wirklich eine Liste brauchen:

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

Und damit zu tun 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']

Weitere hilfreiche stringModulfunktionen:

>>> 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
Vielen Dank. Wie schaffe ich es, die Reihenfolge umzukehren?
Alexa Elis

62
string.ascii_lowercase[::-1]
Jamylak

Die explizite Liste (...) auf dem Ergebnis der Karte (...) ist überflüssig, da die Karte bereits eine Liste
zurückgibt

1
@haavee Eigentlich nein in Python 3 mapgibt keinlist
jamylak

1
Ich frage mich, ob es eine Möglichkeit gibt, dasselbe für ein bestimmtes Gebietsschema zu tun, dh die Alphabete Spanisch, Türkisch usw. zu erhalten
Gonzalo

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

1
Ich habe: [chr (Alpha + 97) für Alpha im Bereich (0,27)], aber das ist viel intuitiver. Es ist nicht erforderlich, sich daran zu erinnern, dass ASCII von a 97 ist
Peterb

5
@MoeChughtai Ich verstehe nicht, wie das prägnanter ist alsstring.ascii_lowercase
Jamylak

Auch : chrange = lambda s: "".join(map(chr, range(*map(ord, s))) + [c[1]]). Verwendung : >>> chrange("az") -> 'abcdefghijklmnopqrstuvwxyz'. Für eine Liste entfernen Sie einfach"".join( )
Braden Best

@jamylak Vielleicht bedeutete MoeChughtai, dass diese Antwort die Lösung in langwierigen Erklärungen wirklich nicht übertönt.
Fornost

1
@Fornost import stringist eine lange Erklärung?
Jamylak

34

In Python 2.7 und 3 können Sie Folgendes verwenden:

import string
string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Wie @Zaz sagt: string.lowercaseist veraltet und funktioniert nicht mehr in Python 3, sondern string.ascii_lowercasein beiden


2
Verwenden Sie in Python 3 string.ascii_lowercase. Dies gibt jedoch eine Zeichenfolge zurück. Für den Fall, dass Sie eine Liste benötigen, denke ich, ist Bg1850 eine ordentliche Lösung
Peterb

Wie oben erwähnt Antwort, string.ascii_letters, string.ascii_lowercase, string.ascii_uppercasealle Arbeiten in Python 3+.
SlimPDX

@ Peterblist(string.ascii_lowercase)
Braden Best

11

Hier ist eine einfache Implementierung im Buchstabenbereich:

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

Demo

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

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

2
Sehr schön! Funktioniert auch mit nicht-lateinischen Zeichen. Ich habe es versucht.
MarkS

3

Wenn Sie nach einem Äquivalent letters[1:10]von R suchen , können Sie Folgendes verwenden:

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

1

Drucken Sie die Groß- und Kleinbuchstaben in Python mit einer integrierten Bereichsfunktion

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

Dies ist der einfachste Weg, den ich herausfinden kann:

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

97 bis 122 sind also die ASCII-Nummer, die 'a' bis 'z' entspricht. Beachten Sie die Kleinbuchstaben und die Notwendigkeit, 123 zu setzen, da diese nicht enthalten sind.

Stellen Sie in der Druckfunktion sicher, dass Sie das {:c}(Zeichen-) Format festlegen. In diesem Fall möchten wir, dass alles zusammen gedruckt wird, ohne dass am Ende eine neue Zeile end=''angezeigt wird.

Das Ergebnis ist folgendes: abcdefghijklmnopqrstuvwxyz

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.