我真的不知道该怎么做。到目前为止我只有这个:
alphabet = 'abcdefghijklmnopqrstuvwxyz'
我应该浏览一个文本文件并按字母顺序计算单词数。 我做不到
if word in alphabet:
因为这需要单词实际上按顺序包含所有这些字母。
澄清:'打击'会通过测试而'打'不会。 我有一个包含数千个单词的列表,我需要浏览整个列表并计算按字母顺序排列的单词数。对不起以前的任何混淆感到抱歉。
答案 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)
我觉得这是家庭作业,所以我只会给出一个算法,而不是复制粘贴代码。
我将采用的方法是将文本文件拆分为单个单词数组。
然后,对于每个单词,将其传递给执行以下内容的谓词:
然后每次谓词返回true时增加一个计数器。