7h47 --> should be 'that' in 1337speak
[['j', 't'], ['h'], ['a', 'h'], ['j', 't']]

Таким образом, вывод должен быть таким: possible_words = [jhaj, jhat, jhhj, jhht, thaj, that, thhj, thht], просто не получается добраться до этого шага.

-2
Ferrariic 12 Июн 2021 в 21:36

2 ответа

Лучший ответ

Вам нужна комбинация этих списков.

К счастью, Python делает за вас тяжелую работу, и все, что вам нужно, - это использовать itertools.product:

import itertools

letters = [['j', 't'], ['h'], ['a', 'h'], ['j', 't']]
words = [''.join(x) for x in itertools.product(*letters)]

И вы получите:

['jhaj', 'jhat', 'jhhj', 'jhht', 'thaj', 'that', 'thhj', 'thht']

Более подробно : itertools.product возвращает итератор, который генерирует все возможные комбинации параметров (список букв). Затем мы перебираем эти комбинации в понимании списка и используем join, чтобы получить слово из каждого списка "символов" (str длины 1 в Python).

3
Héliton Martins 12 Июн 2021 в 18:43

Если вы поклонник рекурсии, вот подход с использованием генераторов:

def combine(combinations, prefix=''):
    head, *tail = combinations

    # If it's the last word from the combinations
    if not tail:
        # Yield the full word using the head as suffixes
        for letter in head:
            yield prefix + letter
    else:
        # Yield from the tail combinations using the head as suffixes
        for letter in head:
            yield from combine(tail, prefix + letter)    

print(list(combine([['j', 't'], ['h'], ['a', 'h'], ['j', 't']])))
# ['jhaj', 'jhat', 'jhhj', 'jhht', 'thaj', 'that', 'thhj', 'thht']
2
enzo 12 Июн 2021 в 18:47