#python
Вопрос:
7h47 --> should be 'that' in 1337speak
[['j', 't'], ['h'], ['a', 'h'], ['j', 't']]
Таким образом , результатом должно быть: possible_words = [jhaj, jhat, jhhj, jhht, thaj, that, thhj, thht]
, просто возникли проблемы с переходом к этому шагу.
Ответ №1:
То, что вам нужно, — это комбинация этих списков.
К счастью, 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).
Комментарии:
1. Спасибо! Это очень полезно 🙂
Ответ №2:
Если вы поклонник рекурсии, вот подход с использованием генераторов:
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']