如何检查3个字符是否处于连续的alpha顺序

Lev*_*von 6 python sequence alphabetical

只是好奇,确定3个字符的序列是否处于连续的alpha顺序中的最pythonic /有效方法是什么?

下面是一个似乎有效的快速和肮脏的方式,其他更好的实现?

我想一种替代方法可能是对序列进行排序并将其与原始序列进行比较.不,这不会解释序列中的差距.

(这不是作业 - NPR周日早上节目的听众会知道)

def checkSequence(n1, n2, n3):
    """ check for consecutive sequence of 3 """
    s = ord('a')
    e = ord('z')

#   print n1, n2, n3
    for i in range(s, e+1):
        if ((n1+1) == n2) and ((n2+1) == n3):
           return True

    return False


def compareSlice(letters):
    """ grab 3 letters and sent for comparison """

    letters = letters.lower()
    if checkSequence(ord(letters[0]), ord(letters[1]), ord(letters[2])):
        print '==> seq: %s' % letters
        return True

    return False
Run Code Online (Sandbox Code Playgroud)

Joe*_*ett 11

简单:

>>> letters = "Cde"
>>> from string import ascii_lowercase
>>> letters.lower() in ascii_lowercase
True
>>> letters = "Abg"
>>> letters.lower() in ascii_lowercase
False  
Run Code Online (Sandbox Code Playgroud)

或者,可以使用string.find().

>>> letters = "lmn"
>>> ascii_lowercase.find(letters) != -1
True
Run Code Online (Sandbox Code Playgroud)

我想使用它的函数看起来像:

def checkSequence(*letters):
    return ''.join(letters).lower() in ascii_lowercase
Run Code Online (Sandbox Code Playgroud)


Yuv*_*dam 5

这是一个很好的pythonic方法来检查任意长的字符序列:

def consecutive_chars(l):
    return all(ord(l[i+1])-ord(l[i]) == 1 for i in range(len(l)-1))
Run Code Online (Sandbox Code Playgroud)