2012-05-23 25 views
6

'daki karakterlerin listesine genişletme Alfabetik olarak, tire ile ayrılmış iki karakterden oluşan bir dizi karakteri açıklayan dizelerim var.Alfabetik aralığı, Python

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

Ne Python bunu yapmanın en iyi yolu olacaktır: Böyle tek tek karakterlerin bir liste halinde onları genişletmek istiyoruz?

cevap

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

hüner ASCII kodları hem karakterleri dönüştürmek ve sonra range() kullanmaktır.

P.S. Bir listeye ihtiyacınız olduğu için, list(map(...)) yapısı liste kavraması ile değiştirilebilir.

+0

, sen koyabilirsiniz İstenen karakterler tam olarak ifade edilir. 'A' ile başlayan harfleri yazmak istedim, bu yüzden harita (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')) 

çıkışı:

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

aix's excellent answermap() kullanmanın yanı sıra, bir liste anlayışı ile yapabilirsiniz: girişinizi bir dize değilse

>>> s = "A-F" 
>>> [chr(item) for item in range(ord(s[0]), ord(s[-1])+1)] 
['A', 'B', 'C', 'D', 'E', 'F']