Rentang alfabet dengan Python

424

Alih-alih membuat daftar karakter alfabet seperti ini:

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

Apakah ada cara agar kita dapat mengelompokkannya ke suatu rentang atau sesuatu? Misalnya, untuk angka dapat dikelompokkan menggunakan range():

range(1, 10)
Alexa Elis
sumber
tampaknya beberapa jawaban mungkin perlu pembaruan untuk python 3?
Charlie Parker
2
@CharlieParker Tidak, sejak awal saya memastikan jawaban saya akan bekerja pada Python 3 dan juga Python 2 pada saat yang sama, karena saya menggunakan string.ascii_lowercase(tersedia pada keduanya) dan bukan string.lowercase(hanya pada py2)
jamylak
dupe dari stackoverflow.com/questions/14927114/… (yang itu sendiri juga tampaknya merupakan penipuan)
hkBst
@ hkBst Tampaknya perbedaannya adalah bahwa pertanyaan-pertanyaan itu meminta rentang subset huruf, sementara yang satu ini meminta seluruh alfabet (yang membuat jawabannya lebih spesifik)
jamylak

Jawaban:

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

Jika Anda benar-benar membutuhkan daftar:

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

Dan melakukannya dengan 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']

Fitur stringmodul bermanfaat lainnya:

>>> 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
sumber
2
Terima kasih. Bagaimana cara saya membuatnya terbalik?
Alexa Elis
63
string.ascii_lowercase[::-1]
jamylak
Daftar eksplisit (...) pada hasil peta (...) berlebihan karena peta sudah mengembalikan daftar
haavee
1
@haavee Sebenarnya tidak dalam Python 3 maptidak mengembalikanlist
jamylak
1
Saya ingin tahu apakah ada cara untuk melakukan hal yang sama untuk lokal tertentu, yaitu mendapatkan huruf Spanyol, Turki, dll.
Gonzalo
106
[chr(i) for i in range(ord('a'),ord('z')+1)]
Bg1850
sumber
1
Saya mendapat: [chr (alpha + 97) untuk alpha dalam kisaran (0,27)] tapi ini jauh lebih intuitif. Tidak perlu mengingat bahwa ascii dari adalah 97
peterb
5
@MoeChughtai Saya tidak mengerti bagaimana ini lebih ringkas daristring.ascii_lowercase
jamylak
Juga: chrange = lambda s: "".join(map(chr, range(*map(ord, s))) + [c[1]]). Penggunaan: >>> chrange("az") -> 'abcdefghijklmnopqrstuvwxyz'. Untuk daftar, cukup hapus"".join( )
Braden Best
@jamylak Mungkin MoeChughtai berarti bahwa jawaban ini benar-benar tidak menenggelamkan solusi dalam penjelasan yang panjang.
Fornost
1
@Fost import stringadalah penjelasan yang panjang?
jamylak
34

Dalam Python 2.7 dan 3 Anda dapat menggunakan ini:

import string
string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Seperti @Zaz katakan: string.lowercasesudah usang dan tidak lagi berfungsi di Python 3 tetapi string.ascii_lowercasebekerja di keduanya

Trinh Nguyen
sumber
2
Dalam Python 3, gunakan string.ascii_lowercase. Tapi ini mengembalikan sebuah string. Jika Anda memerlukan daftar, saya pikir, Bg1850 adalah solusi yang rapi
peterb
Sebagai jawaban atas menyebutkan, string.ascii_letters, string.ascii_lowercase, string.ascii_uppercasesemua pekerjaan di python 3+.
SlimPDX
@peterblist(string.ascii_lowercase)
Braden Best
11

Berikut ini adalah implementasi rentang surat sederhana:

Kode

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']
pylang
sumber
2
Sangat bagus! Juga berfungsi dengan karakter non-Latin. Saya baru saja mencoba.
MarkS
3

Jika Anda mencari yang setara dengan letters[1:10]dari R, Anda dapat menggunakan:

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

Cetak huruf besar dan kecil dengan python menggunakan fungsi rentang bawaan

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

Ini adalah cara termudah yang saya tahu:

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

Jadi, 97 hingga 122 adalah angka ASCII yang setara dengan 'a' to dan 'z'. Perhatikan huruf kecil dan kebutuhan untuk menempatkan 123, karena itu tidak akan dimasukkan).

Dalam fungsi cetak pastikan untuk mengatur format {:c}(karakter), dan, dalam hal ini, kami ingin mencetak semuanya bersama-sama bahkan tidak membiarkan baris baru di akhir, jadi end=''akan melakukan pekerjaan.

Hasilnya adalah ini: abcdefghijklmnopqrstuvwxyz

RicarHincapie
sumber