【问题标题】:Expand alphabetical range to list of characters in Python将字母范围扩展到 Python 中的字符列表
【发布时间】:2012-05-30 06:08:28
【问题描述】:

我有按字母顺序描述一系列字符的字符串,由用连字符分隔的两个字符组成。我想将它们展开成单个字符的列表,如下所示:

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

在 Python 中执行此操作的最佳方法是什么?

【问题讨论】:

    标签: python string character alphabetical alphabet


    【解决方案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']
    

    【讨论】:

      【解决方案2】:

      与使用map()aix's excellent answer 一起,您可以通过列表理解来做到这一点:

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

      【讨论】:

        【解决方案3】:
        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(...)) 构造替换为列表推导式。

        【讨论】:

        • 如果您的输入不是字符串,您可以将所需的字符直接放在表达式中。我想要以'a'开头的文件字母,所以 map(chr, range(ord('a'), ord('a') + 5))
        猜你喜欢
        • 2022-11-12
        • 1970-01-01
        • 1970-01-01
        • 2013-04-10
        • 2020-08-05
        • 1970-01-01
        • 2021-10-08
        • 2023-03-06
        • 2011-10-23
        相关资源
        最近更新 更多