在python中检查字符串是否按字母顺序排列

时间:2012-12-01 16:50:14

标签: python string sorting

我已经将以下代码放在一起,以检查字符串/单词是否按字母顺序排列:

def isInAlphabeticalOrder(word):
    word1=sorted(word)
    word2=[]
    for i in word:
        word2.append(i)
    if word2 == word1:
        return True
    else:
        return False

但我觉得除了将字符串转换成列表之外,还有一种更有效的方法(更少的代码行)。是不是有一个操作数来按字母顺序排序字符串而不将每个字符串转换为列表?任何人都可以提出更有效的方法吗?

7 个答案:

答案 0 :(得分:14)

这是一种简单(和Python惯用)方式:

def isInAlphabeticalOrder(word):
    return word==''.join(sorted(word))

>>> isInAlphabeticalOrder('abc')
True
>>> isInAlphabeticalOrder('acb')    
False

答案 1 :(得分:14)

这具有O(n)的优点(对字符串进行排序为O(n log n))。 Python中的字符(或字符串)如果按字母顺序排在前面,则“小于”另一个字符,因此为了查看字符串是否按字母顺序排列,我们只需要比较每对相邻的字符。另外,请注意您使用range(len(word) - 1)而不是range(len(word)),否则您将在循环的最后一次迭代中超越字符串的边界。

def isInAlphabeticalOrder(word):
    for i in range(len(word) - 1):
        if word[i] > word[i + 1]:
            return False
    return True

答案 2 :(得分:4)

尝试这个,作为一个单行:

all(x <= y for x, y in zip(word, word[1:]))

答案 3 :(得分:3)

您可以在函数中使用generator,如下所示: -

def isInAlphabeticalOrder(word):
    return all((word[i+1] >= word[i] for i in range(len(word) - 1)))

生成器从给定范围获取i的每个值,并将该索引处的字符与先前索引中的字符进行比较。并且所有比较结果都会传递给all函数,如果所有值都为True,则会返回True

>>> def isInAlphabeticalOrder(word):
        return all((word[i+1] >= word[i] for i in range(len(word) - 1)))

>>> isInAlphabeticalOrder("rohit")
False
>>> isInAlphabeticalOrder("aabc")
True
>>> isInAlphabeticalOrder("abc")
True

当然不考虑case-insensitivity。如果要考虑它,请将return语句更改为: -

return all((str.lower(word[i+1]) >= str.lower(word[i]) for i in range(len(word) - 1)))

答案 4 :(得分:2)

这是最简单的:

@Override
public Object[] getSections() {
    ArrayList<String> labels = new ArrayList<>();
    for (LaunchableActivity activity: mActivityInfos) {
        labels.add(activity.getActivityLabel());
    }

    return labels.toArray();
}

@Override
public int getPositionForSection(int i) {
    return i;
}

@Override
public int getSectionForPosition(int i) {
    // We do not need this
    return 0;
}

答案 5 :(得分:0)

如果单词按字母顺序排列,程序将返回true,否则返回false。第二个参数wordList初始化为None,这意味着程序将检查您输入的任何单词,包括数字:

def isAlphabeticalOrder(word, wordList = None):
if (len(word) > 0):
    curr = word[0]
for letter in word:
    if (curr > letter):
        return False
    else:
        curr = letter
if wordList is None:
    return True
return word in wordList

答案 6 :(得分:0)

几个答案已经解决了实际的字符串比较问题。但我想补充一下你的回归逻辑。

初学者通常会编写如下代码:

if something == somethingElse:
  return True
else:
  return False

这段代码总是可以像这样简化:

return something == somethingElse

如果该代码起初没有意义,则将其读作“将某些内容与SomethingElse进行比较,并返回比较结果”。