Как смешивать списки в Python и видеть это в режиме реального времени - PullRequest
0 голосов
/ 11 ноября 2019

Я пытался сделать что-то вроде ниже:

a_list = [
    range(1, 4),
    range(5, 8),
    range(11, 14),
]

Я хотел получить такой результат:

res = ['1 5 11', '1 5 12', '1 5 13', '1 6 11', '1 6 12', '1 6 13', '1 7 11', '1 7 12', '1 7 13',
       '2 5 11', '2 5 12', '2 5 13', '2 6 11', '2 6 12', '2 6 13', '2 7 11', '2 7 12', '2 7 13',
       '3 5 11', '3 5 12', '3 5 13', '3 6 11', '3 6 12', '3 6 13', '3 7 11', '3 7 12', '3 7 13',
      ]

Как я могу получить его

Ответы [ 3 ]

2 голосов
/ 11 ноября 2019

Сочетая itertools.product и ' '.join вы можете сделать это

from itertools import product
# product(*a_list) [('1', '5', '11'), ('1', '5', '12'), ('1', '5', '13'), ...
prod = map(' '.join, product(*a_list)) # ['1 5 11', '1 5 12', '1 5 13', '1 6 11', ...
print(list(prod))
2 голосов
/ 11 ноября 2019

То, что вы ищете, это декартово произведение подсписков.

from itertools import product

a_list = [
    ['1', '2', '3'],
    ['5', '6', '7'],
    ['11', '12', '13'],
]

list(product(*a_list))

Это даст вам список кортежей. Если вам нужен список списков, попробуйте:

[list(x) for x in product(*a_list)]

И, наконец, если вам нужны строки, разделенные пробелом:

[' '.join(x) for x in product(*a_list)]
0 голосов
/ 11 ноября 2019
import itertools
a_list = [
    ['1', '2', '3'],
    ['5', '6', '7'],
    ['11', '12', '13'],
]

b_list = [' '.join(i) for i in itertools.product(*a_list)]
print(b_list)

Результат:

['1 5 11', '1 5 12', '1 5 13', '1 6 11', '1 6 12', '1 6 13', '1 7 11', '1 7 12', '1 7 13', '2 5 11', '2 5 12', '2 5 13', '2 6 11', '2 6 12', '2 6 13', '2 7 11', '2 7 12', '2 7 13', '3 5 11', '3 5 12', '3 5 13', '3 6 11', '3 6 12', '3 6 13', '3 7 11', '3 7 12', '3 7 13']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...