Получение списка 3D, а не списка 2D - PullRequest
0 голосов
/ 08 июня 2018

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

# elements comprising each of groups a1-a4
a1 = ['one','two','three']
a2 = ['four','five','six']
a3 = ['seven','eight','nine']
a4 = ['ten','eleven','twelve']

# each row in b specifies two or more groups, whereby all combinations of one
# element from each group is found
b  = [[a1,a2],
      [a3, a4]]

# map(list,...) converts tuples from itertools.product(*search) to lists
# list(map(list,...)) converts map object into list
# [...] performs list comprehension
l = [list(map(list, itertools.product(*search))) for search in b]
print(l)

Вывод: [[['one', 'four'], ..., ['девять', 'двенадцать']]]

ЖелаемыйВывод: [['one', 'four'], ..., ['девять', 'двенадцать']]

1 Ответ

0 голосов
/ 11 июня 2018

Очевидно, вы можете создать свой список следующим образом:

l = []
for search in b:
    l += list(map(list, itertools.product(*search)))

Но если вы хотите придерживаться понимания списка, вы можете сделать:

l = list(itertools.chain(*[map(list, itertools.product(*search)) for search in b]))

Или:

l = list(map(list, itertools.chain(*[itertools.product(*search) for search in b])))

Создает и связывает два декартовых произведения, а затем отображает кортежи в списки.

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