''.join(random.choice(string.lowercase) for x in range(X))
Ответ 2
Если вы не хотите повторений:
import string, random
''.join(random.sample(string.ascii_lowercase, X))
Если вы хотите (потенциальных) повторений:
import string, random
''.join(random.choice(string.ascii_lowercase) for _ in xrange(X)))
Предположим, что под a-z вы имеете в виду "символы в нижнем регистре ASCII", иначе ваш алфавит может быть выражен по-разному в этом выражении (например, string.lowercase для "зависимых от языка строчных букв", которые могут включать акцентированные или иначе оформленные строчные буквы в зависимости от вашего текущего языка).