2012-05-23 38 views
6

Tôi có chuỗi mô tả một loạt các ký tự theo thứ tự bảng chữ cái, gồm hai ký tự cách nhau bằng dấu gạch nối. Tôi muốn mở rộng chúng ra thành danh sách các ký tự riêng lẻ như sau:Mở rộng phạm vi chữ cái sang danh sách các ký tự trong Python

'a-d' -> ['a','b','c','d'] 
'B-F' -> ['B','C','D','E','F'] 

Cách tốt nhất để làm điều này bằng Python là gì?

Trả lời

11
In [19]: s = 'B-F' 

In [20]: list(map(chr, range(ord(s[0]), ord(s[-1]) + 1))) 
Out[20]: ['B', 'C', 'D', 'E', 'F'] 

Bí quyết là chuyển đổi cả hai ký tự thành mã ASCII, sau đó sử dụng range().

P.S. Vì bạn yêu cầu danh sách, cấu trúc list(map(...)) có thể được thay thế bằng cách hiểu danh sách.

+0

Nếu đầu vào của bạn không phải là một chuỗi, bạn có thể đặt các ký tự mong muốn ngay trong biểu thức. Tôi muốn các chữ cái bắt đầu bằng chữ 'a', nên bản đồ (chr, range (ord ('a'), ord ('a') + 5)) –

1
import string 

def lis(strs): 
    upper=string.ascii_uppercase 
    lower=string.ascii_lowercase 

    if strs[0] in upper:   
     return list(upper[upper.index(strs[0]): upper.index(strs[-1])+1]) 
    if strs[0] in lower: 
     return list(lower[lower.index(strs[0]): lower.index(strs[-1])+1]) 

print(lis('a-d')) 
print(lis('B-F')) 

đầu ra:

['a', 'b', 'c', 'd'] 
['B', 'C', 'D', 'E', 'F'] 
4

Cùng với aix's excellent answer sử dụng map(), bạn có thể làm điều này với một danh sách hiểu:

>>> s = "A-F" 
>>> [chr(item) for item in range(ord(s[0]), ord(s[-1])+1)] 
['A', 'B', 'C', 'D', 'E', 'F'] 
Các vấn đề liên quan