Создайте все комбинации строчных и прописных букв в Python - PullRequest
0 голосов
/ 21 апреля 2020

Мое намерение - вернуть все возможные комбинации строчных и прописных букв с переменной длиной.

Пример: foo (3) вернет все комбинации из aZ длиной 3.

Я знаю, как создать функцию, которая возвращает все с фиксированной длиной, но вам придется изменить код, чтобы изменить длину. Как мне этого добиться? Большое спасибо

Редактировать: я получил его на работу, моя рекурсия была ошибка. Вот код для возврата списка всех комбинаций:


def test(charNumber, array):
    if charNumber == 0:
        arr2 = []
        for s in range(len(array)):
            #alp is an array with all characters I want to use, so I can easily
            #add characters if I want to
            for i in range(len(alp)):
                arr2.append(array[s] + alp[i])
        return arr2
    else:
        arr2 = []
        for s in range(len(array)):
           for i in range(len(alp)):
                arr2.append(array[s] + alp[i])
        return test(charNumber-1, arr2)

def prArr():
    print(test(3, ['']))

Обратите внимание, что это печатает на один символ больше введенного значения, и, как вы видите, вы должны предоставить массив с одной пустой строкой.

Вывод: ´´´ ['aaaa', 'aaab', 'aaa c', 'aaad', 'aaba', 'aabb', 'aab c', 'aabd', 'aaca ',' aacb ',' aa cc ',' aacd ',' aada ',' aadb ',' aad c ',' aadd ',' abaa ',' abab ',' aba c ' , 'abad', 'abba', 'abbb', 'abb c', 'abbd', 'abca', 'abcb', 'ab cc', 'abcd', 'abda', 'abdb' , 'abd c', 'a bdd', 'acaa', 'acab', 'aca c', 'acad', 'acba', 'acbb', 'acb c', ' acbd ',' acca ',' accb ',' a ccc ',' accd ',' acda ',' acdb ',' acd c ',' acdd ',' adaa ',' adab ',' ada c ',' adad ',' adba ',' adbb ',' adb c ',' adbd ',' adca ',' adcb ',' ad cc ',' adcd ',' adda ',' addb ',' add c ',' a ddd ',' baaa ',' baab ',' baa c ',' baad ',' baba ',' babb ',' bab c ',' babd ',' baca ',' bacb ',' ba cc ',' bacd ',' bada ',' badb ',' bad c ',' badd ',' bbaa ', 'bbab', 'bba c', 'b плохой »,« bbba »,« bbbb »,« bbb c »,« bbbd »,« bbca »,« bbcb »,« bb cc »,« bbcd »,« bbda »,« bbdb »,« bbd c ',' b bdd ',' bcaa ',' bcab ',' bca c ',' bcad ',' bcba ',' bcbb ',' bcb c ',' bcbd ' , 'bcca', 'bccb', 'b ccc', 'bccd', 'bcda', 'bcdb', 'bcd c', 'bcdd', 'bdaa', 'bdab', 'bda c ',' bdad ',' bdba ',' bdbb ',' bdb c ',' bdbd ',' bdca ',' bdcb ',' bd cc ',' bdcd ',' bdda ', 'bddb', 'bddc', 'b ddd', 'caaa', 'caab', 'caa c', 'caad', 'caba', 'cabb', 'cab c ',' cabd ',' caca ',' cacb ',' ca cc ',' cacd ',' cada ',' cadb ',' cad c ',' cadd ',' cbaa ', «cbab», «cba c», «cbad», «cbba», «cbbb», «cbb c», «cbbd», «cbca», «cbcb», «cb cc», « cbcd ',' cbda ',' cbdb ',' cbd c ',' cbdd ',' ccaa ',' ccab ',' cca c ',' ccad ',' ccba ', 'ccbb', 'ccb c', 'ccbd', 'ccca', 'cccb', 'cccc', 'cccd', 'ccda', 'ccdb', 'ccd c', 'ccdd ',' cdaa ',' cdab ',' cda c ',' cdad ',' cdba ',' cdbb ',' cdb c ',' cdbd ',' cdca ',' cdcb ',' cd cc ',' cdcd ',' cdda ',' cddb ',' cdd c ',' cddd ',' daaa ',' daab ',' daa c ',' daad ',' daba ',' dabb ',' dab c ',' dabd ', «Дака», «ДаКБ», «Да cc», «ДаКД», «Дада», «Дада», «папа c», «папа», «DBAA», «DBA», «DBA c ',' dbad ',' dbba ',' dbbb ',' dbb c ',' dbbd ',' dbca ',' dbcb ',' db cc ',' dbcd ',' dbda ',' dbdb ',' dbd c ',' d bdd ',' dcaa ',' dcab ',' dca c ',' dcad ',' dcba ',' dcbb ',' dcb c ' , 'dcbd', 'dcca', 'dccb', 'd ccc', 'dccd', 'dcda', 'dcdb', 'dcd c', 'dcdd', 'ddaa', 'ddab' , 'dda c', 'ddad', 'ddba', 'ddbb', 'ddb c', 'ddbd', 'ddca', 'ddcb', 'dd cc', 'ddcd', 'ddda', 'dddb', 'dddc', 'd ddd'] ´´´

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете использовать itertools и ascii_letters для этого:

from itertools import combinations
from string import ascii_letters

for i in combinations(ascii_letters, 3):
    print(''.join(i))
abc
abd
abe
...
WXZ
WYZ
XYZ

Общая длина составляет 22 000+.

Как функция:

def letter_combinations(n):
    return [''.join(i) for i in combinations(ascii_letters, n)]

Если вы также хотите ['aaa', 'aab', ...], используйте itertools.combinations_with_replacement().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...