Как сжать вложенные циклы в Python - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть 2D-список, содержащий списки разных слов.У меня есть набор из 12 гнезд для петель.Мне нужно пройтись по каждой возможной комбинации элементов в 2D-списке и выполнить простой расчет результата.

Первоначально я делал это с помощью функции itertools.product (), а затем выполнял вычисления для каждого результирующего списка, однако результат вызова itertools.product () стал слишком большим, и у меня не хватило памяти.Это означает, что мне нужно, чтобы вычисления выполнялись после каждой итерации.

Мой код выглядит примерно так:

for word1 in possible_words[0]:
    for word2 in possible_words[1]:
            for word3 in possible_words[2]:
                    for word4 in possible_words[3]:
                            for word5 in possible_words[4]:
                                    for word6 in possible_words[5]:
                                            for word7 in possible_words[6]:
                                                    for word8 in possible_words[7]:
                                                            for word9 in possible_words[8]:
                                                                    for word10 in possible_words[9]:
                                                                            for word11 in possible_words[10]:
                                                                                    for word12 in possible_words[11]:
                                                                                        result = ' '.join([word1, word2, word3, word4, word5, word6, word7, word8, word9, word10, word11, word12])                                                                                            
                                                                                        if get_address(result) == desired_address:
                                                                                            return result

Этот код отлично работает и делает то, что мне нужно.Тем не менее, я хочу знать, есть ли способ, которым я могу сжать это более питоническим способом?

1 Ответ

0 голосов
/ 19 ноября 2018

Используйте itertools.product, просто переберите итератор, не создавайте список с ним:

from itertools import product

for words in product(*possible_words):
    result = " ".join(words)
    if result == desired_string:
        return result
...