【发布时间】:2015-07-15 12:38:43
【问题描述】:
TL/DR
给定X = {(A,B),(B,C),(D,E),(B,A),(C,B)}(其中X 是set)
如何过滤显示唯一组合(而不是唯一排列)的子元组,使得X 变为
{(A,B),(B,C),(D,E))}
更长的形式
这里的大多数组合/排列问题有点反问题。
我有一组元组(外元组),其中每个元组有2个元素,这两个元素也是元组(内元组),每个子元组有两个元素,都是整数。
例如,包含三个元素的集合可能看起来像
X = { ( (1,2),(2,3) ), ( (1,3),(1,2) ), ( (2,3),(1,2) ) }
虽然所有外部元组都是唯一的,但我想构建一个子集,其中包含一组 unqiue 元组,其中两个内部元组的 ORDER 是不相关的(即一组唯一组合)。在上面的示例中,这将减少为;
X = { ( (1,2),(2,3) ), ( (1,3),(1,2) )}
因为
( (1, 2),(2,3) ) and ( (2,3),(1,2) ) )
都是(1, 2) 和(2,3) 的组合。
有明显的蛮力/for-loop 方法可以解决这个问题,但感觉不是很 Pythonic。
也许利用itertools 和map?
【问题讨论】:
-
X = {(A,B),(B,C),(D,E),(B,A),(C,B))}不是有效语法 -
@Sudipta
X = { ( (1,2),(2,3) ), ( (1,3),(1,2) ), ( (2,3)(1,2) ) } -
@Sudipta - 对不起,一个额外的 ')' 偷偷溜进去(更正)
标签: python combinations permutation itertools