你怎么知道python中的单词是否按字母顺序排列?

时间:2012-03-27 02:19:24

标签: python

我真的不知道该怎么做。到目前为止我只有这个:

alphabet = 'abcdefghijklmnopqrstuvwxyz'

我应该浏览一个文本文件并按字母顺序计算单词数。 我做不到

if word in alphabet:

因为这需要单词实际上按顺序包含所有这些字母。

澄清:'打击'会通过测试而'打'不会。 我有一个包含数千个单词的列表,我需要浏览整个列表并计算按字母顺序排列的单词数。对不起以前的任何混淆感到抱歉。

3 个答案:

答案 0 :(得分:6)

很简单:

>>> alphabet = 'abcdefghijklmnopqrstuvwxyz'
>>> list(alphabet) == sorted(alphabet)
True
>>> list('blow') == sorted('blow')
True
>>> list('suck') == sorted('suck')
False

所以知道我们可以定义我们需要的谓词:

>>> alphabetical = lambda w: list(w.lower()) == sorted(w.lower())

并将其应用于列表:

>>> lst = ['blow', 'suck', 'abc']
>>> filter(alphabetical, lst)
['blow', 'abc']

从那里开始计算结果并不是一大步:)还有其他一些事情需要考虑:

  • 排序为O(n*log n),但在O(n)中可以轻松解决此问题。这可能没问题,因为单词通常有一定数量的字符,而sorted是用C实现的,因此非常快
  • 如果你真的需要效率,你甚至可以使用sum(1 for w in w if ...)技巧,它使用生成器表达式而不是构建列表。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我觉得这是家庭作业,所以我只会给出一个算法,而不是复制粘贴代码。

我将采用的方法是将文本文件拆分为单个单词数组。

然后,对于每个单词,将其传递给执行以下内容的谓词:

  1. 将字符串转换为小写
  2. 将单词拆分为一个字符数组。
  3. 迭代字符数组,从SECOND字符开始
  4. 测试字符[x]&gt; =字符[x-1]。如果没有,请返回false
  5. 如果您设法退出迭代循环而不失败,则返回true。
  6. 然后每次谓词返回true时增加一个计数器。