我需要一个功能与 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)