Как я могу заменить itertools.product без itertools? - PullRequest
0 голосов
/ 28 апреля 2020

Итак, я сейчас работаю над python скриптом. К сожалению, два модуля не работают друг с другом. Однако мне отчаянно нужен один из них (numba), а другой (itertools), который, как мне кажется, можно было бы заменить проще.

Мне просто нужен какой-то способ превратить входные данные типа (3) во что-то, что выплевывает все комбинации букв ASCII в пределах этой длины (так в данном случае из a-aa-ab-ba-...-ZZZ). Не обязательно должны быть точно введенные числа, равные длине строки, но мне нужно выполнить функцию для каждой строки, поэтому они нужны мне отдельно.

Я пытался использовать вложенные циклы, но никогда не получал результат я хотел. Заранее спасибо!

1 Ответ

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

Большая часть кода itertools содержится в документации. Они показывают эквивалентные или похожие рецепты тоже. https://docs.python.org/3/library/itertools.html?highlight=itertools Здесь:

def product(*args, repeat=1):
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
    pools = [tuple(pool) for pool in args] * repeat
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod)

Теперь, когда у вас есть продукт без использования itertools. Вы можете

import string 
product(string.ascii_letters,list(string.ascii_letters)+[''],list(string.ascii_letters)+[''])
...