6

ハイフンで区切られた 2 つの文字で構成される文字の範囲をアルファベット順に説明する文字列があります。次のような個々の文字のリストにそれらを展開したいと思います。

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

Pythonでこれを行う最良の方法は何ですか?

4

3 に答える 3

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().

PSリストが必要なので、list(map(...))構造をリスト内包表記に置き換えることができます。

于 2012-05-23T16:40:03.797 に答える
4

を使用したaixの優れた回答に加えて、リスト内包表記を使用map()してこれを行うことができます。

>>> s = "A-F"
>>> [chr(item) for item in range(ord(s[0]), ord(s[-1])+1)]
['A', 'B', 'C', 'D', 'E', 'F']
于 2012-05-23T16:47:16.913 に答える
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']
于 2012-05-23T16:46:19.273 に答える