Вопрос, который вы задали (как перебирать алфавит), - это не тот же вопрос, что и проблема, которую вы пытаетесь решить (как посчитать частоту букв в строке).
Вы можете использовать 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'ĺ']
Если бы вы попробовали другой подход к юникоду (с шагом по каждому символу), вы бы долго ждали; Есть миллионы символов Юникода.
Для реализации вашей исходной функции (выведите количество каждой буквы в алфавитном порядке) в терминах этого:
def alphCount(text):
for character, count in sorted(letterOccurrances(text).iteritems()):
print "%s: %s" % (character, count)
alphCount("hello, world!")