Bảng chữ cái trong Python


423

Thay vì lập danh sách các ký tự bảng chữ cái như thế này:

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

Có cách nào để chúng ta có thể nhóm nó vào một phạm vi hoặc một cái gì đó không? Ví dụ: đối với các số có thể được nhóm lại bằng cách sử dụng range():

range(1, 10)

Có vẻ như một số câu trả lời có thể cần cập nhật cho python 3?
Charlie Parker

2
@CharlieParker Không, ngay từ đầu tôi đã chắc chắn rằng câu trả lời của tôi sẽ hoạt động trên Python 3 cũng như Python 2 cùng một lúc, bởi vì tôi đã sử dụng string.ascii_lowercase(có sẵn trên cả hai) và không string.lowercase(chỉ trên py2)
jamylak

bản sao của stackoverflow.com/questions/14927114/ Sự (mà bản thân nó cũng có vẻ là bản sao)
hkBst

@hkBst Có vẻ như sự khác biệt là những câu hỏi đó đang yêu cầu một tập hợp các chữ cái, trong khi câu hỏi này yêu cầu toàn bộ bảng chữ cái (làm cho câu trả lời cụ thể hơn)
jamylak

Câu trả lời:


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

Nếu bạn thực sự cần một danh sách:

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

Và để làm điều đó với 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']

Các stringtính năng mô-đun hữu ích khác :

>>> 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
Cảm ơn. Làm thế nào để tôi làm cho nó để đảo ngược thứ tự?
Alexa Elis

63
string.ascii_lowercase[::-1]
jamylak

Danh sách rõ ràng (...) trên kết quả của bản đồ (...) là không cần thiết vì bản đồ đã trả về một danh sách
haavee

1
@haavee Thật ra không có trong Python 3 mapkhông trả về alist
jamylak

1
Tôi tự hỏi liệu có cách nào để làm điều tương tự cho một địa phương cụ thể, ví dụ: lấy bảng chữ cái tiếng Tây Ban Nha, tiếng Thổ Nhĩ Kỳ, v.v.
Gonzalo

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

1
Tôi đã nhận: [chr (alpha + 97) cho alpha trong phạm vi (0,27)] nhưng điều này trực quan hơn nhiều. Không yêu cầu ghi nhớ rằng ascii của a là 97
peterb

5
@MoeChughtai Tôi không hiểu làm thế nào điều này ngắn gọn hơnstring.ascii_lowercase
jamylak

Ngoài ra : chrange = lambda s: "".join(map(chr, range(*map(ord, s))) + [c[1]]). Cách sử dụng : >>> chrange("az") -> 'abcdefghijklmnopqrstuvwxyz'. Để có danh sách, chỉ cần xóa"".join( )
Braden Tốt nhất

@jamylak Có lẽ MoeChughtai có nghĩa là câu trả lời này thực sự không nhấn chìm giải pháp trong những lời giải thích dài dòng.
Fornost

1
@Fornost import stringlà một lời giải thích dài dòng?
jamylak

34

Trong Python 2.7 và 3 bạn có thể sử dụng điều này:

import string
string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Như @Zaz nói: string.lowercasekhông dùng nữa và không còn hoạt động trong Python 3 mà string.ascii_lowercasehoạt động ở cả hai


2
Trong Python 3, sử dụng string.ascii_lowercase. Nhưng điều này trả về một chuỗi. Trong trường hợp bạn cần một danh sách, tôi nghĩ, Bg1850 là một giải pháp gọn gàng
peterb

Là câu trả lời đầu đề cập đến, string.ascii_letters, string.ascii_lowercase, string.ascii_uppercasetất cả công việc trong python 3+.
SlimPDX

@peterblist(string.ascii_lowercase)
Braden hay nhất

11

Đây là một cách thực hiện phạm vi thư đơn giản:

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

Bản giới thiệu

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

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

2
Rất đẹp! Cũng hoạt động với các ký tự không phải là tiếng Latin. Tôi chỉ cố.
đánh dấu

3

Nếu bạn đang tìm kiếm một tương đương letters[1:10]từ R, bạn có thể sử dụng:

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

1

In bảng chữ cái chữ hoa và chữ thường trong python bằng hàm phạm vi tích hợp

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

Đây là cách dễ nhất tôi có thể tìm ra:

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

Vì vậy, 97 đến 122 là số ASCII tương đương với 'a' đến và 'z'. Lưu ý chữ thường và sự cần thiết phải đặt 123, vì nó sẽ không được bao gồm).

Trong chức năng in, đảm bảo đặt {:c}định dạng (ký tự) và trong trường hợp này, chúng tôi muốn nó in cùng nhau, thậm chí không để một dòng mới ở cuối, vì vậy end=''sẽ thực hiện công việc.

Kết quả là thế này: abcdefghijklmnopqrstuvwxyz

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.