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

时间:2012-04-08 15:26:45

标签: python sequence alphabetical

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

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

我想一种替代方法可能是对副本进行排序 序列并将其与原始序列进行比较。不,那不会考虑 对于序列中的空白。

(这不是家庭作业 - 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

5 个答案:

答案 0 :(得分:11)

易:

>>> letters = "Cde"
>>> from string import ascii_lowercase
>>> letters.lower() in ascii_lowercase
True
>>> letters = "Abg"
>>> letters.lower() in ascii_lowercase
False  

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

>>> letters = "lmn"
>>> ascii_lowercase.find(letters) != -1
True

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

def checkSequence(*letters):
    return ''.join(letters).lower() in ascii_lowercase

答案 1 :(得分:5)

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

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

答案 2 :(得分:4)

ord('a') < ord(a)+1 == ord(b) == ord(c)-1 < ord('z')

答案 3 :(得分:4)

这可以简单地完成

>>> x=['a','b','c']
>>> y=['a','c','b']
>>> z=['c','b','a']
>>> x==sorted(x) or x == sorted(x,reverse=True)
True
>>> y==sorted(x) or y == sorted(y,reverse=True)
False
>>> z==sorted(x) or z == sorted(z,reverse=True)
True
>>> 

这样想。如果它们按升序或降序排序,则字母是连续的。

正如评论中指出的那样,如果序列包含孔,这将不起作用,另一种方法是

>>> ''.join(x).lower() in string.lowercase
True
>>> 

答案 4 :(得分:1)

这样的事情怎么样:

l = letters.lower()
if len(l)>=3 and ord(l[0])+2==ord(l[1])+1==ord(l[2]): print "yes"
else: print "no"