Что такое Pythonic способ передачи списка списков и «распределения» элементов из другого списка в подсписки? - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь изучить Python чуть меньше двух недель.Так что извините, если я просто полностью дезинформирован

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

Допустим, у меня есть list1 = [[x, y], [a, b]] и list2 = [0, 1].

Я хочу list3 = [[x, y, 0], [x, y, 1], [a, b, 0], [a, b, 1]]

В своем исследовании StackOverflow и собственных экспериментах я нашел способы получить всевозможные похожие результаты, такие как:

[[x, y, 0], [a, b, 1]]

[[x, y, 0, 1], [a, b, 0, 1]]

[[x, y, 0, 1], [a, b]]

[[[x, y], 0], [[x, y], 1], [[a, b], 0], [[a, b], 1]]

Я подумал о том, чтобы сделать что-то вроде следующего:

  1. Создайте столько итераций подсписков в списке1, если в списке есть элементы 2 [[x, y], [a, b]] -> [[x, y], [x, y], [a, b], [a, b]]
  2. Свести список1 так, чтобы он больше не был подсписком, а повторял элементы [[x, y], [x, y], [a, b], [a, b]] -> [x, y, x, y, a, b, a, b]
  3. Просмотрите элементы list1 и вставьте элементы list2 вдоль сплющенного списка [x, y, x, y, a, b, a, b] -> [x, y, 0, x, y, 1, a, b, 0, a, b, 1]
  4. Сгруппируйте элементы в соответствующий размер: [x, y, 0, x, y, 1, a, b, 0, a, b, 1] -> [[x, y, 0], [x, y, 1], [a, b, 0], [a, b, 1]]

Если это то, что я должен сделать, то это то, что я должен сделать, и я ищу способ сделать это таким образом, но я чувствую, что должен быть какой-то более-Pythonic способ выполнения этой операции (затем снова, что я знаю?) и, если это так, я изо всех сил, чтобы выяснить, что это можетЯ буду.

Ответы [ 3 ]

1 голос
/ 21 марта 2019

По сути, это просто перекрестное произведение двух списков.

>>> import itertools
>>> list(itertools.product(list1, list2))
[(['x', 'y'], 0), (['x', 'y'], 1), (['a', 'b'], 0), (['a', 'b'], 1)]

Осталось только сгладить каждый кортеж.

>>> [x + [y] for x,y in itertools.product(list1, list2)]
[['x', 'y', 0], ['x', 'y', 1], ['a', 'b', 0], ['a', 'b', 1]]
0 голосов
/ 21 марта 2019

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

list3 = [list[:] + [elem] for list in list1 for elem in list2]
0 голосов
/ 21 марта 2019

Я могу ошибаться, но нет хорошего решения itertools, я не думаю, что

def permutations(a,b):
    for sublist in a:
        for value in b:
            yield sublist + [value]

list1 = [[x, y], [a, b]] 
list2 = [0, 1]
print(list(permutations(list1, list2)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...