【发布时间】:2014-04-02 09:38:12
【问题描述】:
我有一个像这样的元组列表:[(1, 2, 3), (2, 4)](列表的长度和元组的长度可能会有所不同),我想从每个元组中获取包含至少一个元素的所有组合在列表中,还有那些包含更多的组合。
所以结果应该在这个例子中:[[1, 2, 3, 2, 4], [1, 2, 2, 4], [2, 3, 2, 4], [1, 2, 4], [2, 2, 4], [3, 2, 4], [1, 2, 3, 2], [1, 2, 3, 4], [1, 2, 2], [1, 2, 4], [2, 3, 2], [2, 3, 4], [1, 2], [1, 4], [2, 2], [2, 4], [3, 2], [3, 4]]
最小的结果应该包含等于原始列表中元组数量的元素数,最大的结果应该包含元组中存在的所有元素。
元素的顺序无关紧要,重复项最终应该被消除(所以[1, 2, 3, 2, 4] = [1, 2, 3, 4] 并且应该只出现在结果中一次,类似[3, 2] = [2, 3] 等),但我考虑过在之后排序和/或消除重复项创建整个列表。
最好的方法是什么?坦率地说,我什至不知道如何正确开始......
【问题讨论】:
-
itertools中的一些方法是你最好的选择。 -
我正在查看它们,但老实说并没有发现任何真正有用的东西(至少直接解决了我的问题;-))。我正在考虑将所有元组元素加入一个长列表,然后从它们中进行所有组合,并最终从每个元组中消除那些不包含至少一个元素的组合。但我不确定这是最明智的方法。
标签: python tuples combinatorics