Как создать непрерывный алфавитный список python (от az, затем от aa, ab, ac и т. Д.)

Я хотел бы сделать алфавитный список для приложения, аналогичного листу Excel.

Пользователь вводит количество ячеек, и я хотел бы сгенерировать список. Например, пользователю требуется 54 ячейки. Тогда я бы сгенерировал

'a', 'b', 'c', …, 'z', 'aa', 'ab', 'ac', …, 'az', 'ba', 'bb'

Я могу сгенерировать список из [ref]

from string import ascii_lowercase L = list(ascii_lowercase) 

Как сшить его вместе? Здесь задан аналогичный вопрос для PHP. Есть ли у кого-то эквивалент python?

Используйте itertools.product .

 from string import ascii_lowercase import itertools def iter_all_strings(): size = 1 while True: for s in itertools.product(ascii_lowercase, repeat=size): yield "".join(s) size +=1 for s in iter_all_strings(): print s if s == 'bb': break 

Результат:

 a b c d e ... y z aa ab ac ... ay az ba bb 

Это имеет дополнительное преимущество, выходя за рамки двухбуквенных комбинаций. Если вам понадобится миллион строк, он с радостью даст вам три, четыре и пять буквенных строк.


Совет бонусного стиля: если вам не нравится иметь явный break внутри нижнего цикла, вы можете использовать islice чтобы сделать цикл завершенным самостоятельно:

 for s in itertools.islice(iter_all_strings(), 54): print s 

Вы можете использовать понимание списка.

 from string import ascii_lowercase L = list(ascii_lowercase) + [letter1+letter2 for letter1 in ascii_lowercase for letter2 in ascii_lowercase] 

После ответа @Kevin:

 from string import ascii_lowercase import itertools # define the generator itself def iter_all_strings(): size = 1 while True: for s in itertools.product(ascii_lowercase, repeat=size): yield "".join(s) size +=1 

Приведенный ниже код позволяет генерировать строки, которые могут быть использованы для генерации уникальных ярлыков, например.

 # define the generator handler gen = iter_all_strings() def label_gen(): for s in gen: return s # call it whenever needed print label_gen() print label_gen() print label_gen() 
Interesting Posts

Фильтр VBA и регрессия контура

В плагине Excel для Rally, что такое поле xParent?

Parse Excel для JSON

В excel из ряда строк возвращаем значение столбца строки с наибольшим значением из другого столбца

Файл Excel для java-объектов с использованием списка списков

Использование вторичной оси для диаграммы вызывает проблему оси x и первичной оси y (Excel)

Последовательный подсчет с использованием 2 столбцов

Excel VBA – проверьте, обновлена ​​ли какая-либо ячейка, используемая макросом, если это так, повторите макрос. Поддерживать форматирование

преобразование диапазона данных

Подсчитывая, сколько лотерейных розыгрышей требуется, чтобы появился ряд чисел

Создание XLA из исходного кода

Добавление данных в существующую таблицу Excel

Выбирать оператор Case – это приложение Application.ScreenUpdating обратно

Как установить строку перед столбцами при генерации Excel (xlsx)

Откройте Excel с сервера в браузере клиента, используя VBScript

Давайте будем гением компьютера.