我有按字母顺序描述一系列字符的字符串,由用连字符分隔的两个字符组成。我想将它们扩展成单个字符的列表,如下所示:
'a-d' -> ['a','b','c','d']
'B-F' -> ['B','C','D','E','F']
在 Python 中执行此操作的最佳方法是什么?
我有按字母顺序描述一系列字符的字符串,由用连字符分隔的两个字符组成。我想将它们扩展成单个字符的列表,如下所示:
'a-d' -> ['a','b','c','d']
'B-F' -> ['B','C','D','E','F']
在 Python 中执行此操作的最佳方法是什么?
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(...))
可以用列表推导替换该构造。
除了使用aix的出色答案map()
外,您还可以通过列表理解来做到这一点:
>>> s = "A-F"
>>> [chr(item) for item in range(ord(s[0]), ord(s[-1])+1)]
['A', 'B', 'C', 'D', 'E', 'F']
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']