2012-05-23 3 views
6

में वर्णों की सूची में वर्णमाला रेंज का विस्तार करें मेरे पास वर्णमाला के वर्णों की एक श्रृंखला का वर्णन करने वाले स्ट्रिंग हैं, जो एक हाइफ़न द्वारा अलग किए गए दो वर्णों से बना है।पायथन

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

क्या अजगर में ऐसा करने का सबसे अच्छा तरीका है: मैं इस तरह अलग-अलग पात्रों की एक सूची में उन्हें बाहर का विस्तार करना चाहते हैं?

उत्तर

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

चाल उनके ASCII कोड के लिए दोनों पात्रों कन्वर्ट करने के लिए, और फिर range() का उपयोग करें।

पीएस चूंकि आपको एक सूची की आवश्यकता है, इसलिए list(map(...)) निर्माण सूची समझ के साथ प्रतिस्थापित किया जा सकता है।

+0

अपने इनपुट एक स्ट्रिंग नहीं है, तो आप रख सकते हैं वांछित अक्षर अभिव्यक्ति में सही है। मैं 'ए' से शुरू होने वाले फाइल अक्षरों को चाहता था, इसलिए नक्शा (सीआर, रेंज (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')) 

उत्पादन:

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

aix's excellent answermap() का उपयोग कर के साथ, आप एक सूची समझ के साथ ऐसा कर सकता है:

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