Как рассчитать все возможные комбинации двух буквенно-цифровых символов?

Имея алфавит из букв AZ и цифр 0-9, как получить все 1296 возможных комбинаций, например:

['AA', 'AB', ..., 'AZ', 'A0', 'A1', ..., 'Z9', '0A', '0B', ..., '98', '99']

В качестве побочного вопроса, как называется этот тип системы счисления?


person Kishan M    schedule 28.12.2017    source источник
comment
Используйте itertools комбинации с заменой   -  person Mr. T    schedule 28.12.2017


Ответы (2)


Текущие предложения неверны. Например, комбинации с заменой не дадут вам AB и BA одновременно, только первый. И permutations не будет AA, BB и т. Д.

Вместо этого вы должны использовать itertools.product.

Например:

import string
import itertools

combinations_generator = itertools.product(string.ascii_uppercase + string.digits, 
                                           repeat=2)
combinations = list(map(''.join, combinations_generator))
print(len(combinations))

Это даст вам ровно 1296 комбинаций.

combinations_generator будет генерировать кортежи, такие как ('A', 'A'), ('A', 'B') и т. Д.
И с map(''.join, combinations_generator) мы объединим их вместе, как 'AA', 'AB' и т. Д.

person Georgy    schedule 28.12.2017

вы можете использовать перестановки, чтобы получить список.

Например

import string
import itertools
series = [''.join(r) for r in itertools.permutations([str(i) for i in range(10)]+[str(c) for c in string.ascii_uppercase], 2)]
print(series)
print(len(series))  # got 1260 here
person CSJ    schedule 28.12.2017
comment
Разве это не должно быть 1296 комбинаций? - person Kishan M; 28.12.2017
comment
О, да, тогда в серию нужно добавить AA BB CC DD .. 00 ... 99, поэтому вы можете просто использовать 2 слоя для цикла, чтобы получить серию, никаких встроенных функций не требуется. - person CSJ; 28.12.2017