''.join(random.choice(string.lowercase) for x in range(X))
Если Вам не нужны повторы:
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
для "зависящих от локали строчных букв", которые могут включать в себя акцентированные или иным образом оформленные строчные буквы в зависимости от Вашей текущей локали).