Мне нужна функция, которая работает аналогично itertools.product, но без повторяющихся элементов.
Например:
no_repeat_product((1,2,3), (5,6))
= ((1,5), (None,6), (2,5), (None,6), ...(None,6))
no_repeat_product((1,2,3), (5,6), (7,8))
= ((1,5,7), (None,None,8), (None,6,7), (None,None,8), ...(None,None,8))
Есть идеи?
Изменить: моя формулировка была неправильной.Я имел в виду без повторения одинаковых чисел в последовательных выходных значениях .
Например,
itertools.product((1,2,3), (4,5), (6,7) is
(1,4,6)
(1,4,7), etc
Здесь 1,4 появляется дважды в выходных данных.Итак, я хочу пропустить запись чисел, когда они такие же, как элемент ранее.Итак, я хочу получить следующий вывод:
(1,4,6)
(None,None,7)
Когда он равен None, подразумевается, что он совпадает с предыдущим элементом в результате.
Дальнейшее редактирование:
Моему объяснению все еще не хватало ясности.Предположим, у меня есть список книг, номера глав и номера страниц.Предположим, что каждая книга имеет одинаковое количество глав, а каждая глава имеет одинаковое количество страниц.Итак, списки (book1, book2, book3), (chap1, chap2), (page1, page2, page3).
Теперь предположим, что я хочу собрать описания для каждой страницы:
itertools.product дастя:
(book1, chap1, page1), (book1, chap1, page2)..... (book3, chap2, page3)
Если я расположил эти страницы последовательно, мне не нужно повторять описания.Итак, если книга и глава совпадают, на второй странице мне не нужно указывать названия книг и глав. Итак, вывод должен быть:
(book1, chap1, page1), (None, None, page2), ..
(when the pages of first chapter are over..) (None, chap2, page1), (None, None, page2)......
(when the chapters of the first book are over..)(book2, chap1, page1)..............
(None, None, page3)