Разное количество вложенных петель - PullRequest
2 голосов
/ 06 января 2020

В настоящее время у меня есть следующая проблема.

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

Каждый элемент из одного списка должен объединяться с каждым элементом из другого списка в соответствии со спецификацией list_order. Вы получаете list_result. Если вы знаете, сколько списков, то вы решаете это с помощью вложенных циклов for. Но как мне это сделать, если количество списков меняется? Я также пробовал рекурсию, но она не сработала.

list_a = ['A', 'B', 'C']
list_b = ['H', 'I', 'J', 'K', 'L']
list_c = ['1', '2']

list_order = [['list_a', 'list_b', 'list_c'], ['list_b', 'list_c']]

list_result = [['AH1', 'AH2', 'AI1', 'AI2', ...], ['H1', 'H2', 'I1', 'I2', ...]]

Ответы [ 2 ]

3 голосов
/ 06 января 2020

Использование itertools.product :

from itertools import product as pd
list_result = [[''.join(k) for k in pd(*[eval(i) for i in j])] for j in list_order]
print(list_result)

Выход

[['AH1', 'AH2', 'AI1', 'AI2', 'AJ1', 'AJ2', 'AK1', 'AK2', 'AL1', 'AL2', 'BH1', 'BH2', 'BI1', 'BI2', 'BJ1', 'BJ2', 'BK1', 'BK2', 'BL1', 'BL2', 'CH1', 'CH2', 'CI1', 'CI2', 'CJ1', 'CJ2', 'CK1', 'CK2', 'CL1', 'CL2'], ['H1', 'H2', 'I1', 'I2', 'J1', 'J2', 'K1', 'K2', 'L1', 'L2']]
1 голос
/ 06 января 2020

Я изменил list_order для представления индексов в списках.

from itertools import product

list_a = ['A', 'B', 'C']
list_b = ['H', 'I', 'J', 'K', 'L']
list_c = ['1', '2']

lists = [list_a, list_b, list_c]

list_order = [[0, 1, 2], [1, 2]]

for order in list_order:
    current_lists = [lists[index] for index in order]
    for tpl in product(*current_lists):
        print("".join(tpl))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...