您提出的问题(如何遍历字母表)与您尝试解决的问题(如何计算字符串中字母的频率)不是同一个问题。
您可以使用 string.lowercase,正如其他海报所建议的那样:
import string
allTheLetters = string.lowercase
要按照您“习惯”的方式做事,将字母视为数字,您可以使用“ord”和“chr”函数。绝对没有理由这样做,但也许它更接近你真正想要弄清楚的:
def getAllTheLetters(begin='a', end='z'):
beginNum = ord(begin)
endNum = ord(end)
for number in xrange(beginNum, endNum+1):
yield chr(number)
你可以说它做了正确的事,因为这段代码打印了True:
import string
print ''.join(getAllTheLetters()) == string.lowercase
但是,要解决您实际尝试解决的问题,您需要使用字典并随时收集字母:
from collections import defaultdict
def letterOccurrances(string):
frequencies = defaultdict(lambda: 0)
for character in string:
frequencies[character.lower()] += 1
return frequencies
这样使用:
occs = letterOccurrances("Hello, world!")
print occs['l']
print occs['h']
这将分别打印“3”和“1”。
请注意,这也适用于 unicode:
# -*- coding: utf-8 -*-
occs = letterOccurrances(u"héĺĺó, ẃóŕĺd!")
print occs[u'l']
print occs[u'ĺ']
如果您要在 unicode 上尝试其他方法(通过每个字符递增),您将等待很长时间;有数百万个 unicode 字符。
按照以下方式实现您的原始功能(按字母顺序打印每个字母的计数):
def alphCount(text):
for character, count in sorted(letterOccurrances(text).iteritems()):
print "%s: %s" % (character, count)
alphCount("hello, world!")