Как получить каждую строку вариантов со списком возможностей для каждой позиции - PullRequest
2 голосов
/ 06 февраля 2020

Допустим, у меня есть список списков с именем master_list, который имеет следующие свойства:

  1. Каждый список внутри master_list содержит строки, которые представляют собой одиночные ди git натуральные числа
  2. Каждый список внутри master_list имеет длину от 2 до 5
  3. * master_list имеет длину от 1 до 8

Что я хочу сделать возвращает список вариантов строки, используя список возможностей для каждой позиции.

Вот пример master_list и как будет выглядеть результат:

master_list = [['3', '2', '6'], ['6', '5', '3', '9'], ['9', '8', '6']]

#  In this case the output would contain 3*4*3 = 36 elements 

output = ["339","366","399","658","636","258","268","669","668","266","369","398",
           "256","296","259","368","638","396","238","356","659","639","666","359",
           "336","299","338","696","269","358","656","698","699","298","236","239"]

Ответы [ 2 ]

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

пытался перебирать каждый список с вложенными циклами for, затем я понял, что мне нужно будет использовать рекурсию, потому что число списков является переменным. Но я застрял на том, как это сделать. Вложенные циклы дали мне вывод выше, но он по существу жестко запрограммирован для этого случая.

Попробуйте это (он использует itertools.product ):

import itertools

li = [['3', '2', '6'], ['6', '5', '3', '9'], ['9', '8', '6']]
result = [''.join(i) for i in itertools.product(*li)]
print(result)

Выходы:

['369', '368', '366', '359', '358', '356', '339', '338', '336', '399', '398', '396', '269', '268', '266', '259', '258', '256', '239', '238', '236', '299', '298', '296', '669', '668', '666', '659', '658', '656', '639', '638', '636', '699', '698', '696']

Если вы хотите преобразовать каждый элемент в int:

result = [int(''.join(i)) for i in itertools.product(*li)]
1 голос
/ 06 февраля 2020

Продукт itertools выдаст вам все комбинации в кортежах, как в этом примере Все комбинации списка списков , затем вы можете объединить каждый кортеж в одну строку или создать число и преобразовать в строку

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