Как разбить вложенный список на несколько списков в Python? - PullRequest
1 голос
/ 20 сентября 2019

Формат ввода моего кода следующий:

Первая строка содержит целое число n .Следующие n строки содержат список целых чисел, разделенных пробелами.

Мне нужно преобразовать элементы каждой строки в список и затем вычислить декартово произведение этих списков.Итак, я дошел до того, что я преобразовал элементы каждой строки в список и сохранил списки в «mylist».

Однако, поскольку «mylist» является вложенным списком, я знаю, как вычислятьдекартово произведение каждого элемента.

from itertools import product
n = int(input())

mylist = []
for i in range(n):
    elem = list(map(int, input().split()))
    mylist.append(elem)
product = list(product(???))

Например, если мой ввод:

2 # number of lists
1 2 3 # 1st list
4 5 6 # 2nd list

, тогда «mylist» будет:

my list = [[1, 2, 3], [4, 5, 6]]

и мне нужен следующий результат (декартово произведение двух списков в «mylist»):

[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

OBS: мне не обязательно нужна переменная с именем «mylist»;Мне просто нужно декартово произведение двух строк ввода.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

То, что вы описали, является в точности продуктом Cartedian , а в python он реализован библиотекой itertools.
Используя itertools.product , вы можете решить свою проблему с помощьюодна строка кода:

import itertools
my_list = [[1, 2, 3], [4, 5, 6]]
list(itertools.product(*my_list))
# output: [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

Или, эквивалентно, используя понимание списка:

list1, list2 = my_list
[(x,y) for x in list1 for y in list2]

Возможная реализация product может быть следующей:

def product(*my_list):
    l_tuple = map(tuple, my_list)
    result = [[]]
    for t in l_tuple:
        result = [a + [b] for a in result for b in t]
    for prod in result:
        yield tuple(prod)
1 голос
/ 20 сентября 2019

Вы можете просто использовать product из itertools как,

>>> l
[[1, 2, 3], [4, 5, 6]]
>>> import itertools
>>> list(itertools.product(*l))
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...